Rabbit MQ阻塞调用以发送消息并确保它为超出的消息限制或超出消息大小限制提供了正确的回复代码

时间:2017-11-09 09:51:35

标签: rabbitmq limit exceed

您好我正在寻找兔子mq的简单解决方案。以下是对兔子进行的设置。

  1. 启动兔子服务器
  2. 使用持久选项创建类型主题的交换(myexchange)。
  3. 使用持久选项创建队列(myqueue),并将x-max-length-bytes设置为4,将x-max-length设置为2.
  4. 将myexchange与myrouue绑定到myqueue。
  5. 使用aqmp频道使用basic_publish发布消息(channel.basicPublish(myexchange,myrouting,true,                 null,“test”.getBytes(“UTF-8”));
  6. 使用发布商确认设置,例如channel.confirmSelect();和channel.waitForConfirmsOrDie();
  7. 下面的代码段

    channel = connectionFactory.getChannel();
    channel.queueDeclarePassive("myqueue");
    channel.confirmSelect();
    channel.basicPublish("myexchange", "myrouting", true, 
            null, "test".getBytes("UTF-8"));
    channel.waitForConfirmsOrDie();
    

    现在,对于超出的消息数量/超出的大小,兔子mq没有回复错误。我能够发送1000条消息/ 1kb大小,消费者也消费所有这些消息。那我怎么能得到错误代码? 对此有何帮助?

1 个答案:

答案 0 :(得分:0)

RabbitMQ团队监控this mailing list,有时只回答StackOverflow上的问题。

这里有两件事要考虑。首先,您的消费者可能正在以足够快的速度消费消息,从而无法达到限制。

其次,当命中队列长度限制时,将从队列头部删除消息以为新消息腾出空间。 这意味着您将丢失队列中最早的邮件 - docs。此行为可在3.7.0中配置。

但是,在任何情况下都不会返回错误,因此我不知道为什么您认为会返回错误。文档清楚地说明了达到队列限制时会发生什么。