有可能得到一个"推动"当邮件数量达到阈值时?

时间:2014-06-01 13:32:54

标签: rabbitmq push message-queue messaging threshold

我想检查

  1. 获取队列中的消息数的最佳做法是什么。 我知道我可以通过queue.getMessageCount()获取它 我也知道你可以通过监视器插件获取它。这是一个http请求吗?或者使用rabbitmqctl应用程序。(JNI?)? 如果我只想在X消息到达时做出反应,最好的方法是什么?
  2. 更重要的是 - 我可以通过推送获取队列中的消息数吗?
  3. 我可以声明接收推送通知的阈值吗? (例如,每次有5000条消息时都会收到信号)

1 个答案:

答案 0 :(得分:0)

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

  

队列长度是一种考虑就绪消息的措施,忽略未确认的消息和消息大小。一旦达到限制,消息将从队列前面删除或以字母命名,以便为新消息腾出空间。

因此,您可以配置Dead Letter Exchanges并管理超出限制的拒绝邮件。

  

原因是一个名称描述了为什么消息是死信的,并且是以下之一:   被拒绝 - 邮件被requeue = false拒绝,   已过期 - 邮件的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始终在运行,您的应用程序会在到达。

时触发批量函数