【问题标题】:Spring cloud stream RabbitMQ - bind DLQ with an exchange using one routing keySpring cloud stream RabbitMQ - 使用一个路由键将 DLQ 与交换绑定
【发布时间】:2021-12-31 14:31:20
【问题描述】:

我正在使用 Spring Cloud Stream 版本3.0.6.RELEASE

我有一个名为my.queue.exchange 的现有交易所。我的应用程序包含一个消费者,我想创建一个名为MY_QUEUE 的队列并将该队列绑定到my.queue.exchange 交换。此外,我想将失败的消息重新发布到名为 MY_QUEUE_DLQ 的 DLQ。

我的问题是名为MY_QUEUE_DLQ 的死信队列绑定到my.queue.exchange.dlx 交换,使用两个路由键而不是一个,第一个使用路由键my.queue.rkey.dlx,第二个使用路由键MY_QUEUE

我的消费者 bean:

@Bean
public Consumer<Dto> consumeFunction() {

    return dto -> {
       // do stuff
    };
}

我的application.yml:

spring:
  cloud:
    stream:
      function:
        definition: consumeFunction
      rabbit:
        bindings:
          consumeFunction-in-0:
            consumer:
              autoBindDlq: true
              deadLetterQueueName: MY_QUEUE_DLQ
              deadLetterExchange: my.queue.exchange.dlx
              deadLetterRoutingKey: my.queue.rkey.dlx
              deadLetterExchangeType: topic
              declareExchange: false
              bindQueue: true
              queueNameGroupOnly: true
              bindingRoutingKey: 'my.queue.rkey'
      bindings:
        consumeFunction-in-0:
          destination: my.queue.exchange
          group: MY_QUEUE

【问题讨论】:

    标签: java spring rabbitmq spring-cloud-stream


    【解决方案1】:

    您需要在兔子消费者属性上设置republishToDlq: false。 在RabbitExchangeQueueProvisioner可以看到如下代码(见评论_

    if (properties instanceof RabbitConsumerProperties
                        && ((RabbitConsumerProperties) properties).isRepublishToDlq()) {
        /*
         * Also bind with the base queue name when republishToDlq is used, which
         * does not know about partitioning
         */
        declareBinding(dlqName, new Binding(dlq.getName(), DestinationType.QUEUE,
                            dlxName, baseQueueName, arguments));
    }
    

    您还可以通过here 了解更多详情。

    另外,我看到你正在使用

    spring:
      cloud:
        stream:
          function:
            definition: consumeFunction
    

    请改成

    spring:
      cloud:
        function:
          definition: consumeFunction
    

    因为其他属性已被弃用,并且已在 3.2 版本中删除。

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 2017-12-25
      • 1970-01-01
      • 2017-04-28
      • 2020-09-28
      相关资源
      最近更新 更多