从Java/Spring中检索RabbitMQ队列中未被确认的消息数量

11

有没有办法返回未被确认的消息数量?

我正在使用这段代码获取队列中的消息数量:

DeclareOk declareOk = amqpAdmin.getRabbitTemplate().execute(
        new ChannelCallback<DeclareOk>() {
            public DeclareOk doInRabbit(Channel channel)
                throws Exception {
                return channel.queueDeclarePassive(name);
            }
        });
return declareOk.getMessageCount();

不过我也想知道未被确认的消息数量。

我发现RabbitMQ管理工具包括该信息(对于每个队列,它给出准备/未确认和总消息数),我猜想必须有一种方法可以从Java / Spring检索该信息。

谢谢

更新

好的,似乎无法通过编程实现,因为配置/队列的列表不是AMPQ的一部分。

有可能启用管理插件并查询REST Web服务有关队列的信息(以及其他内容)。 更多信息请参见此处:

http://www.rabbitmq.com/management.html


如果应用程序和 RabbitMQ 运行在同一台机器上,您可以使用 rabbitmqctl 命令行工具和 list_queues 参数来获取未 ACK 的消息。请参考此处 Matthias 的答案 https://groups.google.com/forum/m/?fromgroups#!topic/rabbitmq-discuss/Q6YyFgA41JE。 - user452425
2个回答

17

正如你在更新中所说,如果启用管理插件,你可以查询REST API:

例如:

`http://username:password@queue-server:15672/api/queues/%2f/queue_name.queue`

这将返回JSON数据,其中包括:

  • messages_unacknowledged (未确认消息数)
  • messages_ready(可用消息数)

如果您有与服务器的安全连接,这是一件好事。


4
使用 RabbitMQ 3.4.1 时,为了让此功能正常工作,我必须省略路径末尾的 .queue - Wayne Conrad
我们是否有任何Java API可以代替对此点的REST API调用?因为有时这个调用需要太长时间,甚至超过一分钟。虽然这很少见,但它正在成为一个性能问题! - User

1

3.8.9版本的实际URL:

http://username:password@queue-server:15672/api/queues/%2F/queue-name


(注意:保留HTML标签)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接