我有一个Java客户端,它监视RabbitMQ队列。我可以用这个代码获得当前队列中的消息数
@Resource
RabbitAdmin rabbitAdmin;
..........
DeclareOk declareOk = rabbitAdmin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() {
public DeclareOk doInRabbit(Channel channel) throws Exception {
return channel.queueDeclarePassive("test.pending");
}
});
return declareOk.getMessageCount();
我想获得更多的细节,如-
- 当前排队项目的消息正文
- 自创建队列以来,队列中排队的邮件总数
有什么方法可以在Java客户端中检索这些数据吗?
使用AMQP协议(包括RabbitMQ实现),您无法获得100%保证的此类信息。
最接近消息计数的数字是用queue.declare-ok
(javaAMQP客户端库中的AMQP.Queue.DeclareOk
)返回的消息计数。
虽然您使用queue.declare-ok
接收的消息数可能与队列中的确切消息数相匹配,但您不能依赖它,因为它不计算在事务期间等待确认或发布到队列但尚未提交的消息。
这真的取决于你需要什么样的精度。
至于排队消息的正文,您可能需要手动提取队列中的所有消息,查看它们的正文并将它们放回队列。这是做你想做的事的唯一方法。
您可以使用管理插件、RabbitMQ管理HTTP API和rabbitmqctl-util(请参阅list_queues、list_channels)获取有关消息计数的一些信息。
自从创建队列以来,您无法获得已发布的消息总数,我认为没有人在无用的情况下实现这些统计数据(仅供参考,消息流平均每秒10k,几千年后您甚至不会达到uint64)。
AMQP.Queue.DeclareOk dok = channel.queueDeclare(QUEUE_NAME, true, false, false, queueArgs);
dok.getMessageCount();
通过http api、访问队列详细信息
http://public-domain-name:15672/api/queues/%2f/queue_name
要通过localhostcli promt、的命令访问队列详细信息
curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name
其中,"%2f"是默认vhost/
。(%2f /
字符的URL编码)
[注意-如注释中所述,需要启用管理插件。]