RabbitMQ - 拒绝消息和最大长度的不同死信交换

时间:2017-07-09 15:54:10

标签: rabbitmq

根据https://www.rabbitmq.com/maxlength.html,我有一个max length参数集的队列。对于此队列,还定义了死信交换。

我注意到,当达到最大长度时,被拒绝的消息和消息都会在死信交换中结束。

是否可以定义多个死信交换?一个用于被拒绝的消息,一个用于清除消息。

更新

我不介意被清除的消息被默默地丢弃,而不是转发给死信交换。这样,只有被拒绝的消息才会在死信交换中结束。这可能吗?

1 个答案:

答案 0 :(得分:0)

这取决于您随后要处理的消息。在我的情况下,我需要丢弃“已清除”消息,因为我只想将取消整理的消息重新发布到同一队列的末尾,以便在处理其余消息后重试它们。

结果证明RabbitMQ已经考虑了这个用例。来自RabbitMQ docs

  

有可能形成消息死信的循环。例如,当队列将邮件死信到默认交换而不指定死信路由键时,可能会发生这种情况。如果整个周期内没有拒绝,则处于这种周期的消息(即两次到达同一队列的消息)将被丢弃。

因此,如果您创建圈子,则只有拒绝的消息才真正被重新路由到队列,而清除的消息则不会。