我一直在努力寻找一种方法来为所有@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。
答案 0 :(得分:4)
不是通过属性。
您必须使用自己的重试拦截器覆盖侦听器容器工厂的建议链 - 使用semisilent
构建 - 而不是注入
RetryInterceptorBuilder
您需要注入一个适当配置的builder.recoverer(new RejectAndDontRequeueRecoverer());
- 以及发布到您选择的交换,它会向邮件头添加其他信息(堆栈跟踪等)。
请参阅RepublishMessageRecoverer
以了解默认拦截器是如何built from the properties。
重新发布恢复者将在this section of the Spring AMQP docs中讨论。