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

Spring boot 重试@RabbitListener的配置,以编程方式指定死信队列,spring-boot,spring-amqp,spring-rabbit,Spring Boot,Spring Amqp,Spring Rabbit,我一直在试图找到一种方法,将重试机制设置为所有@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:

我一直在试图找到一种方法,将重试机制设置为所有
@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());
    
    您需要插入一个适当配置的
    重新发布MessageRecoverer
    -以及发布到您选择的exchange,它会向消息头添加附加信息(堆栈跟踪等)

    请参阅
    SimpleRableBitListenerContainerFactoryConfigurer
    ,了解默认拦截器是如何配置的

    中讨论了重新发布恢复程序