当前位置: 首页 > 面试题库 >

RabbitMQ-获取排队的邮件总数

邓驰
2023-03-14
问题内容

我有一个Java客户端,它监视RabbitMQ队列。我可以使用此html" target="_blank">代码获取当前在队列中的邮件数

@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- okAMQP.Queue.DeclareOk在Java AMQP客户端库中)。

虽然您收到的邮件计数queue.declare- ok可能与确切的邮件编号队列相匹配,但是您不能依靠它,因为它不计算在事务处理期间等待确认或已发布但尚未提交的消息。

这实际上取决于您需要哪种精确度。

对于已排队的邮件正文,您可能希望手动提取队列中的所有邮件,查看其正文并将其放回队列。这是您要做的唯一方法。

您可以使用管理插件,RabbitMQ管理HTTP
API
和Rabbitmqctl
util 获取有关消息计数的一些信息(请参阅list_queues,list_channels)。

自创建队列以来,您无法获得已发布消息的总数,而且我认为没有人会在无用的情况下实现此类统计信息(仅供参考,消息流的平均速度为每秒10k,您甚至在数千年内都不会达到uint64)。



 类似资料:
  • 问题内容: 我们正在使用amqplib来发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将使我能够向管理员用户显示良好的状态图,并检测某个组件是否无法满足负载需求。 我在amqplib文档中找不到有关读取队列状态的任何信息。 有人可以指出我正确的方向吗? 问题答案: 使用皮卡: 使用PyRabbit: 使用HTTP 句法: 例: 注意:默认虚拟主机是需要转义为 使用C

  • 说明 获取当前所有排队号码列表 请求地址 http://api.dc78.cn/Api/wwlist 请求方式 GET 请求参数 URL参数 描述 无 POST参数 描述 无 返回 { "status": 1, "name": "凤凰广场店", "list": [ { "id": "8", "time": "2014-11-26 11:42:12", "type": "C", "num": "C0

  • 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 wwlist string 请求示例 { "action": { "action": "wwlist" } } 响应参数说明 参数 描述 必填 示例值 类型 最大长度 status 返回状态。接口成功时为1,出错为0 是 1 number name 门

  • 我们刚刚将一些工作负载转移到我目前正在管理的azure上,我读了一些关于service bus的文章,想知道是否可以使用它对电子邮件进行排队 azure中托管的应用程序通过使用自定义库将其电子邮件发送到服务总线队列,其中一个或多个工作进程将从队列中拾取消息,然后通过邮件中继服务发送。 这将使我的开发人员从我在任何时候使用的邮件中继服务的细节中解脱出来,我也可以在发送邮件之前执行进一步的处理,而不需

  • 我有一个spring boot rabbitmq应用程序,其中我必须将一个Employee对象发送到队列中。那么我已经设置了一个侦听器应用程序。对employee对象进行一些处理,并将此对象放入回调队列中。 为此,我在应用程序中创建了以下对象。 null 我的应用程序文件如下所示。 应用程序.属性 MainClass.java EmployeeResponseReceiver. 问题是每当我启动我

  • 我正在为Azure服务总线使用最新的Java绑定(V3.1.3):https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/servicebus 当我创建一个新的队列客户端,计划一条消息,然后取消它... ...代码似乎按预期工作:活动消息计数变为0。但是一旦被调度的消息到达它应该被调度的时间(我测试了10秒和100秒以后),消息有时会