我有一个使用RabbitMQ的Spring Cloud Streaming转换器应用程序。它正在从Rabbit队列中读取,进行一些转换,并写入Rabbit交换。我将我的应用程序部署到PCF并绑定到Rabbit服务。
这很好用,但现在我需要一个单独的连接来消费和生成消息。 (我想使用一个连接从Rabbit队列中读取,并使用不同的连接写入Rabbit交换)。我该如何配置?是否可以将我的应用程序绑定到2个不同的Rabbit服务,使用1作为生产者,1作为消费者?
答案 0 :(得分:2)
好吧,从版本1.3
开始,Rabbit Binder确实为生产者创建了一个单独的ConnectionFactory
:https://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>