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

从java代码获取rabbitmq队列中的消息计数,java,rabbitmq,message-queue,Java,Rabbitmq,Message Queue,我试图检查给定的rabbitmq队列是否为空。 为此,我尝试使用: channel.queueDeclarePassive(queueName).getMessageCount(). 使用此选项,无论rabbitmqctllist\u queues显示多少消息,我总是得到0作为答案。 据我所搜索的,没有可用于此的API 我想要与rabbitmqctllist\u queues给出的答案相同的答案。请建议一种方法。您无法使用SDK获取消息计数。channel.queueDeclarePassiv

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

channel.queueDeclarePassive(queueName).getMessageCount().
使用此选项,无论
rabbitmqctl
list\u queues
显示多少消息,我总是得到0作为答案。 据我所搜索的,没有可用于此的API


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

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

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

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

以下是it在本地服务器上的响应示例:

{
    "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"
}

使用以下url通过http api访问详细信息

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

或者从localhost cli promt使用以下命令

curl-i-u guest\u uname:guest\u密码http://localhost:15672/api/queues/%2f/queue_name

在哪里,,
%2f是默认的vhost“/”

尝试使用
频道。queueDeclare
代替尝试使用此频道。。不走运。。仍然给出0作为答案。我正在尝试这样做,但对我无效(我可以打开../api,也可以打开../api/queues,但是../api/queues/vhost和../api/queues/vhost/queue_名称编号。你知道我可以尝试做些什么吗?你提到过,你可以启用管理插件“”,这是什么意思?谢谢!
http://localhost:15672/api/queues/%2f/hello
-其中“hello”队列名称和“/”-vhost名称