从java代码获取rabbitmq队列中的消息计数

时间:2014-02-19 10:22:41

标签: java rabbitmq message-queue

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

channel.queueDeclarePassive(queueName).getMessageCount().

使用此功能,无论rabbitmqctl list_queues显示的消息数量如何,我总是得到0作为答案。 据我所知,目前还没有可用的API。

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

2 个答案:

答案 0 :(得分:5)

您无法使用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"
}

答案 1 :(得分:0)

使用以下网址通过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是默认的vhost“/”