使用spring云流将消息重新传递到RabbitMQ使用者设置



我们有一个SpringBoot服务实现,其中我们使用以下设置的延迟消息传递:

  1. 获取消息的初始队列(队列1(设置了TTL,该队列还有一个使用特定死信路由密钥提及的死信交换
  2. 另一个队列(队列2(使用设置为死信路由密钥的路由密钥绑定到前一个队列的DLX
  3. 使用者收听队列2上的消息

延迟的消息传递似乎如预期的那样工作,但我发现在某些情况下消息会重新传递。

如果我在消费者中有一个调试点,并且在阅读消息一段时间后保留该消息,那么一旦处理了当前消息,消费者就会得到另一条具有以下属性的消息:

  • 将属性重新传递为true
  • 属性deliveryAttempt as 1
  • 只有第一条消息具有x-death标头,而重新传递的消息似乎没有

尝试传递消息的次数为3次,与每次读取每个重新传递的消息后使用调试点暂停使用者的次数相同。

我的理解是,默认情况下确认模式是AUTO,所以一旦消费者阅读了消息,就不会重新发送?

我尝试过使用maxAttempts=1属性,但似乎没有帮助。

我正在使用spring云流来创建消费者和队列。

我曾经在使用者中的消息处理失败(抛出异常(时遇到过这个问题。在这种情况下,如果已配置DLQ,请确保添加以下配置,以便将失败的消息路由到DLQ,而不是原始侦听队列。"兔子:autoBindDlq:true">

否则,如果您没有设置DLQ;autoBindDlq";至";false";。

最新更新