我有一个具有数千个队列的RabbitMQ服务器设置。其中只有大约5个是持久队列。每隔一段时间,就会备份一个队列,该队列将有大约5-10条处于就绪状态的消息。这些消息似乎不在持久队列中。我想找出哪些队列的消息处于就绪状态,但发生这种情况的唯一指示是在web管理控制台的概述页面上,该页面用于所有队列。

有没有办法查询Rabbit,告诉我一段时间内处于就绪状态的消息的统计信息,以及它们位于哪个队列中?
发布于 2015-06-17 05:13:56
我会使用HTTP API。
http://rabbit-broker:15672/api/queues
这将为您提供JSON中当前队列状态的列表,因此您必须不断对其进行轮询。存储您想要监视的时间段的给定队列"messages_ready“的"name”。现在,您将能够看到哪些队列具有该积压峰值。
您可以在HTTP客户端上使用简单的curl以及您喜欢的任何平台。
请注意:您要连接的用户必须有monitor标签才能访问所有队列信息。
开箱即用没有简单的方法AFAIK,你必须手动点击队列并在UI中查看他们在过去一个小时内的图形,这很繁琐。
发布于 2018-07-27 22:23:35
我有类似的需求,我找到了一种比轮询更好的方法。docs表示,如果在请求中使用特殊参数,可能会通过api获取原始样本。
例如,在您的示例中,如果您对具有就绪状态的消息感兴趣,您可以向队列询问队列长度的历史记录,例如,过去60秒,每1秒采样一次(注意,15672是rabbitmq_management使用的默认端口):
http://rabbitHost:15672/api/queues/vhost/queue?lengths_age=60&lengths_incr=1
对于默认vhost=/,它将是:
http://rabbitHost:15672/api/queues/%2F/queue?lengths_age=60&lengths_incr=1
然后在结果json中会有一些额外的_details对象,如下所示:
"messages_ready_details": {
"avg": 8.524590163934427,
"avg_rate": 0.08333333333333333,
"samples": [{
"timestamp": 1532699694000,
"sample": 5
}, {
"timestamp": 1532699693000,
"sample": 11
},
<... more samples ...>
],
"rate": -6.0
},
"messages_ready": 5,然后在这个原始数据上,你可以做任何你需要的统计数据。中使用不同的参数,则会出现其他原始数据样本
会出现什么采样?它需要什么参数才能出现?
发送和接收的邮件 msg_rates_age / msg_rates_incr
发送和接收的字节数 data_rates_age / data_rates_incr
队列长度 lengths_age / lengths_incr
节点统计信息(例如文件描述符、可用磁盘空间) node_stats_age / node_stats_incr
https://stackoverflow.com/questions/30716282
复制相似问题