【问题标题】:Programmatically declare bindings in Spring Cloud Stream (RabbitMQ)?在 Spring Cloud Stream (RabbitMQ) 中以编程方式声明绑定?
【发布时间】:2018-11-25 03:06:08
【问题描述】:

我有一个 Spring Cloud Stream 应用程序,它使用 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 中创建两个队列:

  1. q1 与路由密钥x.z.# 交换x
  2. q2 与路由密钥y.z.# 交换y

我想创建一个单个队列,它使用多个交换和路由键。我知道我无法将交换绑定到来自application.yaml 的多个路由键(请参阅this SO 问题),因此我怀疑我无法将 Spring Cloud Stream 配置为对单个绑定使用多个目标(交换) .

所以我的问题是,我可以以编程方式声明一个binding 从多个交易所消费吗?如果这样做,是否需要在application.yaml 文件中保留任何内容?

我该怎么办?

【问题讨论】:

    标签: spring-boot rabbitmq spring-amqp spring-cloud-stream spring-rabbit


    【解决方案1】:

    您可以使用交换到交换绑定来满足此要求。

    x -> z
    y -> z
    

    然后从 z 上与# 绑定的单个队列消费。

    您可以在引导应用程序中将交换绑定定义为@Bean s。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2019-07-01
      • 2018-12-24
      • 2019-07-17
      • 1970-01-01
      相关资源
      最近更新 更多