当应用程序没有生成器时,如何使Spring Cloud Stream创建RabbitMQ队列和绑定?

时间:2018-05-29 12:25:06

标签: java spring spring-boot rabbitmq spring-cloud-stream

我正在使用Spring Boot 2.0.1,Spring云依赖项是从

导入的
<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,以便自动创建队列和绑定。但是我的应用程序不会产生任何消息,它只消耗其他应用程序发布的消息,因此我没有定义任何生成器。我试图修改application.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

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

如何修改我的application.yaml文件(以及可能的代码,如果需要),以使Spring Cloud流在启动时创建队列和绑定?

1 个答案:

答案 0 :(得分:1)

我们通常只在生产者方面提供交换;除非设置了required-groups,否则我们不会提供队列。

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

如果没有发生,那么其他问题就出现了;你有@EnableBinding吗?

显示您的应用程序代码。