+-

我有一个监视RabbitMQ队列的 Java客户端.我能够使用此代码获取当前队列中的消息计数
@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(java AMQP客户端库中的AMQP.Queue.DeclareOk)返回的消息计数.
虽然您使用queue.declare-ok收到的消息数量可能与确切的消息号码排队相匹配,但您不能依赖它,因为它不计算在事务期间等待确认或发布到队列但尚未提交的消息.
这真的取决于你需要什么样的精准度.
对于排队邮件正文,您可能需要手动提取队列中的所有邮件,查看其正文并将其放回队列.这是做你想做的事的唯一方法.
您可以使用Management Plugin,RabbitMQ Management HTTP API和rabbitmqctl util获取有关消息计数的一些信息(请参阅list_queues,list_channels).
自从队列创建以来,您无法获得已发布的总消息数量,我认为没有人实现此类统计数据而无用(FYI,消息流量平均每秒10k,甚至几千年内甚至无法达到uint64).
点击查看更多相关文章
转载注明原文:java – RabbitMQ – 获取入队消息的总数 - 乐贴网