RabbitMQ-获取排队的邮件总数



我有一个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();

我想获得更多的细节,如-

  1. 当前排队项目的消息正文
  2. 自创建队列以来,队列中排队的邮件总数

有什么方法可以在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编码)

[注意-如注释中所述,需要启用管理插件。]

最新更新