@RabbitListener的重试配置以编程方式指定死信队列

时间:2016-09-01 22:32:42

标签: spring-boot spring-amqp spring-rabbitmq

我一直在努力寻找一种方法来为所有@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-exchangex-dead-letter-routing-key这是我想要避免的

所以我的问题是:

  1. 有没有办法在不重新创建队列的情况下以编程方式指定在消耗尝试后消息应该在哪个DLQ不使用参数x-dead -...
  2. 我正在使用Spring Boot 1.4.0.RELEASE。

1 个答案:

答案 0 :(得分:4)

不是通过属性。

您必须使用自己的重试拦截器覆盖侦听器容器工厂的建议链 - 使用semisilent构建 - 而不是注入

RetryInterceptorBuilder

您需要注入一个适当配置的builder.recoverer(new RejectAndDontRequeueRecoverer()); - 以及发布到您选择的交换,它会向邮件头添加其他信息(堆栈跟踪等)。

请参阅RepublishMessageRecoverer以了解默认拦截器是如何built from the properties

重新发布恢复者将在this section of the Spring AMQP docs中讨论。