繁体   English   中英

使用 spring 云 stream 将消息重新传送到 RabbitMQ 消费者设置

[英]Message getting redelivered to RabbitMQ consumer setup using spring cloud stream

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

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

延迟消息传递似乎按预期工作,但我发现在某些情况下消息重新传递存在问题。

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

  • 重新交付的属性为真。
  • 物业交付尝试为 1
  • 只有第一条消息有x-death header 而重新发送的消息似乎没有。

尝试传递消息的次数是我每次在读取每条重新传递的消息后使用调试点暂停消费者的次数的 3 倍

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

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

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

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

否则,如果您不设置 DLQ,请将“autoBindDlq”配置为“false”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM