我们已经使用2个队列和x-dead-letter-exchange / x-message-ttl实现了延迟消息处理,其中在queue1中的消息超时后,它将转到queue2。
现在可以设置RabbitMQ,以便在处理来自queue2的消息时我们将其拒绝为“死信”,那么它会自动转到queue3吗? 我担心的是,队列2中的消息已被标记为“已死”,有没有办法区分那些因为被拒绝而自动将它们放到队列3中而死亡的消息?
答案 0 :(得分:3)
是的,该消息有可能多次出现死信。
要查看为什么消息是死信的原因,请查看x-death
标头,这是最近排序的数组,因此消息是死信的最新原因是第一个。
有关详细信息,请查看Dead-Lettered Messages section in Dead Letter Exchanges manual。
<强> UPD:强>
在RabbitMQ官方用户组中讨论Is it possible to to move dead-lettered message only if it was rejected? :
...
我关注的是:因为已经发送了消息 TTL死信是否有任何方法将从Queue2移动到Queue3 只有拒绝?
要严格回答您的问题,否:您无法选择哪些活动 死信。
然而,我认为你真正要求的是“不会发出所有信息 queue2因为已经存在,所以会立即将死信写入queue3 死了一次吗?“而答案就是这样;一旦有了消息 已被命名为queue2,它是一个自由球员,只会是 如果它再次出现了可以让人遗忘的东西,那就再说一次。