Spring Cloud Streaming - 生产者的单独连接&消费者

时间:2017-10-04 16:54:27

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

我有一个使用RabbitMQ的Spring Cloud Streaming转换器应用程序。它正在从Rabbit队列中读取,进行一些转换,并写入Rabbit交换。我将我的应用程序部署到PCF并绑定到Rabbit服务。

这很好用,但现在我需要一个单独的连接来消费和生成消息。 (我想使用一个连接从Rabbit队列中读取,并使用不同的连接写入Rabbit交换)。我该如何配置?是否可以将我的应用程序绑定到2个不同的Rabbit服务,使用1作为生产者,1作为消费者?

1 个答案:

答案 0 :(得分:2)

好吧,从版本1.3开始,Rabbit Binder确实为生产者创建了一个单独的ConnectionFactoryhttps://docs.spring.io/spring-cloud-stream/docs/Ditmars.RELEASE/reference/htmlsingle/#_rabbitmq_binder

  

从版本1.3开始,RabbitMessageChannelBinder为非事务生成器创建内部ConnectionFactory副本,以避免在共享时消费者死锁,由于Broker上的内存警报而阻塞了缓存连接。 / p>

因此,在升级到Spring Cloud Stream Ditmars之后,也许这对您来说已经足够了。

<强>更新

  

如何配置具有不同连接属性的此内部ConnectionFactory副本?

不,那是不同的故事。您需要的是multi-binder支持:https://docs.spring.io/spring-cloud-stream/docs/Ditmars.RELEASE/reference/htmlsingle/#multiple-binders

您应该为不同的连接工厂声明几个块:

spring.cloud.stream.bindings.input.binder=rabbit1
spring.cloud.stream.bindings.output.binder=rabbit2

...

spring:
  cloud:
    stream:
      bindings:
        input:
          destination: foo
          binder: rabbit1
        output:
          destination: bar
          binder: rabbit2
      binders:
        rabbit1:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: <host1>
        rabbit2:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: <host2>