使用Spring和RabbitMQ,我设置了两个主题交换xdlx以及两个队列qdlqq绑定到xdlq绑定到dlxdlx被配置为q的死信交换。

q中的邮件被拒绝(不排队)时,它将成功发送到dlx,然后发送到dlq

现在,我使用铲子插件将dlq中的字母标记的邮件移回q。只要这次成功处理了消息,此方法就成功工作(确认)。

但是,如果再次拒绝q中的这些铲除消息之一,则会将其静默丢弃。我希望它将再次发送到DLX dlx。我配置有误还是误解了DLX或铲子的概念?

最佳答案

我怀疑你在碰到这种味道...


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


...因为你是铲子。请参见Dead Letter Exchanges

取而代之的是,将DLQ配置为TTL,并使用死信配置,这会使过期的邮件路由回到原始队列。这样,x-death头将获得两个条目-1个来自原始队列的拒绝,1个来自DLQ的到期。

我猜想,通过铲子,经纪人认为这是一个周期。

08-07 11:19