代码之家  ›  专栏  ›  技术社区  ›  Johan

当应用程序没有生产者时,如何使SpringCloud流创建rabbitmq队列和绑定?

  •  0
  • Johan  · 技术社区  · 8 年前

    我使用的是SpringBoot2.0.1,SpringCloud依赖项是从以下位置导入的:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Finchley.RC1</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    

    我认为利益的依赖性是:

    <dependencies>
        ...
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-reactive</artifactId>
        </dependency>
        ...
    </dependencies>
    

    在我的 application.yaml

    spring:
      cloud:
        stream:
          bindings:
            input1:
              bindingRoutingKey: key1.#
              binder: rabbit
              group: group1
              destination: dest-group1
              transacted: true
            input2:
              bindingRoutingKey: key2.#
              binder: rabbit
              group: group2
              destination: dest-group2
              transacted: true
    

    例如,我读过 here 那个应该加上 requiredGroups 以自动创建队列和绑定。但是,我的应用程序不生成任何消息,它只使用其他应用程序发布的消息,因此我没有定义任何生产者。我试图修改 应用程序.yaml 只添加虚拟生产者的文件:

    spring:
      cloud:
        stream:
          bindings:
            dummyProducer:
              producer:
                requiredGroups: group1,group2
            input1:
              bindingRoutingKey: key1.#
              binder: rabbit
              group: group1
              destination: dest-group1
              transacted: true
            input2:
              bindingRoutingKey: key2.#
              binder: rabbit
              group: group2
              destination: dest-group2
              transacted: true
    

    但这不管用。所以我的问题是:

    我应该如何修改我的 应用程序.yaml 文件(以及可能的代码,如果需要的话)使SpringCloud流在启动时创建队列和绑定?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Gary Russell    8 年前

    我们通常只在生产者端提供交换;我们不提供队列,除非 required-groups 已设置。

    在消费者方面,我们总是提供队列(和交换)。

    如果那不发生,就有别的问题了;你有没有 @EnableBinding ?

    显示应用程序代码。