Spring boot 在SpringCloudStream(RabbitMQ)中以编程方式声明绑定?

Spring boot 在SpringCloudStream(RabbitMQ)中以编程方式声明绑定?,spring-boot,rabbitmq,spring-amqp,spring-cloud-stream,spring-rabbit,Spring Boot,Rabbitmq,Spring Amqp,Spring Cloud Stream,Spring Rabbit,我有一个SpringCloudStream应用程序,它使用RabbitMQ绑定器来使用消息(它不会产生任何消息)。application.yaml文件如下所示: spring: cloud: stream: rabbit: bindings: x: consumer: bindingRoutingKey: x.z.# queueNameGroupOnly:

我有一个SpringCloudStream应用程序,它使用RabbitMQ绑定器来使用消息(它不会产生任何消息)。
application.yaml
文件如下所示:

spring:
  cloud:
    stream:
      rabbit:
        bindings:
          x:
            consumer:
              bindingRoutingKey: x.z.#
              queueNameGroupOnly: true
          y:
            consumer:
              bindingRoutingKey: y.z.#
              queueNameGroupOnly: true
      bindings:
        x:
          binder: rabbit
          group: q1
          destination: x
        y:
          binder: rabbit
          group: q2
          destination: y
这将在RabbitMQ中创建两个队列:

  • q1
    绑定到交换
    x
    的路由键
    x.z.
  • q2
    绑定到使用路由键
    y.z.
  • 我想创建一个使用多个交换和路由密钥的队列。我知道我无法将一个交换绑定到
    application.yaml
    中的多个路由密钥(请参见问题),因此我怀疑我无法将Spring Cloud Stream配置为使用多个目的地(交换)进行单个绑定

    所以我的问题是,我能否以编程方式声明一个
    绑定
    使用多个交换?如果执行此操作,是否需要在
    应用程序.yaml
    文件中保留任何内容


    我应该怎么做?

    您可以使用exchange到exchange绑定来满足此要求

    x -> z
    y -> z
    
    然后从z上绑定了
    #
    的单个队列中消费

    您可以将启动应用程序中的exchange到exchange绑定定义为
    @Bean
    s