在 Spring Cloud Stream 中使用多个 rabbitmq 绑定器时忽略绑定路由键

问题描述 投票:0回答:0

我正在尝试将一个小型 Spring Cloud Stream 应用程序连接到两个不同的 RabbitMQ 系统。 对于这两个系统,我想将流输入绑定到现有交换,指定路由键。 Spring Cloud Stream 可以为我管理一个匿名队列来路由消息。 但是,我尝试指定的路由键被忽略了。

当连接到单个系统时,这会按预期工作,创建一个匿名队列并使用我指定的路由键绑定到现有交换。 但是一旦我尝试连接到两个系统(根据文档),路由键就会被忽略:匿名队列被创建并绑定到交换,但路由键只是'#'。

这是我的

application.yaml
文件:

spring:
  cloud:
    stream:
      bindings:
        function1-in-0:
          binder: rabbit1
          destination: existing-exchange
        function2-in-0:
          binder: rabbit2
          destination: existing-exchange

      binders:
        rabbit1:
          type: rabbit
          default-candidate: false
          inherit-environment: false
          environment:
            spring:
              rabbitmq:
                host: host1
                username: ...
                password: ...
                virtual-host: ...
        rabbit2:
          type: rabbit
          default-candidate: false
          inherit-environment: false
          environment:
            spring:
              rabbitmq:
                host: host2
                username: ...
                password: ...
                virtual-host: .

      rabbit:
        bindings:
          function1-in-0:
            consumer:
              binding-routing-key: routing.key.1
              declare-exchange: false
          function2-in-0:
            consumer:
              binding-routing-key: routing.key.2
              declare-exchange: false
    function:
      definition: function1;function2

我可能忽略了一些明显的东西,但我没有找到关于在使用多个系统时自定义 RabbitConsumerProperties 的文档。

rabbitmq spring-cloud-stream spring-rabbit spring-cloud-stream-binder
© www.soinside.com 2019 - 2024. All rights reserved.