当消息数达到阈值时,是否可以获得"push"?



我想检查

  1. 获取队列中消息数量的最佳实践是什么?我知道我可以通过queue。getmessagecount()获得它我也知道你可以得到它,因为监视器插件得到它。是HTTP请求吗?或者使用rabbitmqctl应用程序(JNI?) ?如果我只想在X条消息到达时才做出反应,那么最好的方法是什么?
  2. 更重要的是,我可以通过推送获得队列中的消息数吗?

我可以声明一个接收推送通知的阈值吗?(例如,每次我有5000条消息时获得一个信号)

您可以使用队列x-max-length http://www.rabbitmq.com/maxlength.html

队列长度是考虑就绪消息,忽略未确认消息和消息大小的度量。一旦达到限制,消息将从队列的前面被丢弃或成为死信,以便为新消息腾出空间。

因此您可以配置死信交换并管理超出限制拒绝的消息。

原因是一个名称,描述了为什么消息是死信,并且是以下之一:Rejected -消息被拒绝,requeue=false,expired -消息的TTL过期;或Maxlen -超过允许的最大队列长度。

我希望它有帮助

编辑* *

这个想法可以是:

在DLE上订阅一个队列,例如_queue,这样当消息到达时就意味着您的消息到达了。

void hanlemymessage(msg){
.....
}

  //// consumer _queue
  public void handleDelivery(String consumerTag, Envelope envelope,
            BasicProperties properties, byte[] body) throws java.io.IOException {
               MyMessage m= new MyMessage(body)
               voidhanlemymessage(m)
              StartmyBulkConsumer()
    }

现在你可以启动你的work_consumer

    //// consumer work_queue
          public void handleDelivery(String consumerTag, Envelope envelope,
                    BasicProperties properties, byte[] body) throws java.io.IOException {
                       MyMessage m= new MyMessage(body)
                       voidhanlemymessage(m)
                       if (msgcount.addandget()==mythreshold){
                          closeConsumer()
                         }

这可能是一个解决方案。

实际上我认为这个逻辑应该委托给应用程序:例如,work_consumer总是在运行,并且您的应用程序在达到。

时触发批量功能。

最新更新