@RabbitListener 的重试配置以编程方式指定死信队列
Retry Configuration for @RabbitListener programatically specify dead-letter queue
我一直在努力寻找一种方法来为所有 @RabbitListener
设置重试机制。我已经尝试过以下属性:
listener:
auto-startup: true
concurrency: 1
max-concurrency: 1
retry:
enabled: true
initial-interval: 1000
max-attempts: 3
max-interval: 10000
multiplier: 2
stateless: true
它工作正常唯一的问题是消息没有发送错误。我遇到的唯一问题是,为了将消息发送到特定的 DLQ
,我必须更改队列以添加参数 x-dead-letter-exchange
和 x-dead-letter-routing-key
,这是我想避免的事情.
所以我的问题是:
- 有没有一种方法可以通过编程方式指定
DLQ
消息在用尽尝试后应该去哪里而不重新创建队列? 不使用参数 x-dead-...
我正在使用 Spring Boot 1.4.0.RELEASE。
不是通过属性。
您必须使用自己的重试拦截器覆盖侦听器容器工厂的建议链 - 使用 RetryInterceptorBuilder
构建 - 而不是注入
builder.recoverer(new RejectAndDontRequeueRecoverer());
您需要注入适当配置的 RepublishMessageRecoverer
- 以及发布到您选择的交易所,它会向消息 headers.[=16 添加附加信息(堆栈跟踪等) =]
查看SimpleRabbitListenerContainerFactoryConfigurer
,了解默认拦截器是如何built from the properties。
this section of the Spring AMQP docs 中讨论了重新发布恢复器。
我一直在努力寻找一种方法来为所有 @RabbitListener
设置重试机制。我已经尝试过以下属性:
listener:
auto-startup: true
concurrency: 1
max-concurrency: 1
retry:
enabled: true
initial-interval: 1000
max-attempts: 3
max-interval: 10000
multiplier: 2
stateless: true
它工作正常唯一的问题是消息没有发送错误。我遇到的唯一问题是,为了将消息发送到特定的 DLQ
,我必须更改队列以添加参数 x-dead-letter-exchange
和 x-dead-letter-routing-key
,这是我想避免的事情.
所以我的问题是:
- 有没有一种方法可以通过编程方式指定
DLQ
消息在用尽尝试后应该去哪里而不重新创建队列? 不使用参数 x-dead-...
我正在使用 Spring Boot 1.4.0.RELEASE。
不是通过属性。
您必须使用自己的重试拦截器覆盖侦听器容器工厂的建议链 - 使用 RetryInterceptorBuilder
构建 - 而不是注入
builder.recoverer(new RejectAndDontRequeueRecoverer());
您需要注入适当配置的 RepublishMessageRecoverer
- 以及发布到您选择的交易所,它会向消息 headers.[=16 添加附加信息(堆栈跟踪等) =]
查看SimpleRabbitListenerContainerFactoryConfigurer
,了解默认拦截器是如何built from the properties。
this section of the Spring AMQP docs 中讨论了重新发布恢复器。