【问题标题】:Getting count of messages in a rabbitmq queue from java code从java代码获取rabbitmq队列中的消息计数
【发布时间】:2014-03-19 14:40:00
【问题描述】:

我正在尝试检查给定的 rabbitmq 队列是否为空。 为此,我正在尝试使用:

channel.queueDeclarePassive(queueName).getMessageCount().

无论rabbitmqctllist_queues 显示的消息数量如何,使用这个我总是得到 0 作为答案。 据我搜索,没有可用的 API。

我想要与rabbitmqctl list_queues 给出的相同答案。请建议一种方法。

【问题讨论】:

  • 尝试改用channel.queueDeclare
  • 也试过这个.. 没有运气.. 仍然给出 0 作为答案..

标签: java rabbitmq message-queue


【解决方案1】:

您无法使用 SDK 获取消息计数。 channel.queueDeclarePassive(queueName).getMessageCount() 通常不正确,因为它不会计算等待确认的消息。

您可以启用管理插件并通过 REST API 查询队列:

http://localhost:15672/api/queues/vhost/queue_name 

响应包含消息总数以及处于处理/就绪状态的消息。 访问“localhost:15672/api”以查看有关如何调用它的更多详细信息。

这是它在本地服务器上的响应示例:

{
    "memory":14680,
    "message_stats":{
        "publish":1,
        "publish_details":{
            "rate":0
        }
    },
    "messages":1,
    "messages_details":{
        "rate":0
    },
    "messages_ready":1,
    "messages_ready_details":{
        "rate":0
    },
    "messages_unacknowledged":0,
    "messages_unacknowledged_details":{
        "rate":0
    },
    "idle_since":"2014-02-21 18:01:54",
    "policy":"",
    "exclusive_consumer_tag":"",
    "consumers":0,
    "backing_queue_status":{
        "q1":0,
        "q2":0,
        "delta":[
            "delta",
            0,
            0,
            0
        ],
        "q3":0,
        "q4":1,
        "len":1,
        "pending_acks":0,
        "target_ram_count":"infinity",
        "ram_msg_count":1,
        "ram_ack_count":0,
        "next_seq_id":1,
        "persistent_count":0,
        "avg_ingress_rate":0,
        "avg_egress_rate":0,
        "avg_ack_ingress_rate":0,
        "avg_ack_egress_rate":0
    },
    "status":"running",
    "name":"01d99c41-7e08-4122-a7f3-c57d25a460f5",
    "vhost":"/",
    "durable":true,
    "auto_delete":false,
    "arguments":{
    },
    "node":"rabbit@SHACNG109WQPY"
}

【讨论】:

  • 我正在尝试这样做,但它对我不起作用。 :( 我可以打开 ../api ,也可以打开 ../api/queues ,但是 ../api/queues/vhost 和 ../api/queues/vhost/queue_name 没有。你知道我可以尝试做什么吗?工作?你提到,,你可以启用管理插件''他的意思是什么?谢谢!
  • http://localhost:15672/api/queues/%2f/hello - 'hello' 队列名称和 '/' - 虚拟主机名
【解决方案2】:

使用以下网址通过http api访问详细信息,

http://public-domain-name:15672/api/queues/%2f/queue_name

或使用 localhost cli promt 中的以下命令,

curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name

在哪里, %2f 是默认虚拟主机 "/"

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 2017-09-16
    • 2018-08-10
    • 2013-07-15
    • 2013-12-18
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多