我有两个微服务学生和老师
在 Student 微服务中,我为交换 XYZ 创建了 MessageSink
@Input("XYZ")
SubscribableChannel xyz();
在 Teacher 微服务中,我将交换 XYZ 配置为扇出
应用程序属性
spring.cloud.stream.rabbit.bindings.XYZ.producer.exchangeType=fanout
spring.cloud.stream.bindings.XYZ.contentType=application/json
但我在这里面临的问题是学生服务在教师服务之前启动,并且正在创建类型为主题的 XYZ 交换。
为了解决这个问题,我在两个服务(即消费者和生产者)中都添加了 exchangeType。随着服务数量的增加,这些配置的数量也在增加。
我想将默认的 exchangeType 更改为 fanout,所以下面是几个问题。
- 有什么方法可以将
spring-cloud-stream
中的默认exchangeType
更改为扇出而不是主题? - 有什么方法可以通过 rabbit-mq 配置更改默认的
exchangeType
吗? - 作为解决方案,我计划将
exchangeType
保留为topic
和路由键#
。但这种方法的问题是stomp
客户端正在为每个浏览器主机创建队列,队列名称为stomp-subscription-randomString
和空白路由键。那么有没有办法在订阅流的同时提供路由 key 呢?我正在使用/exchange/exchangeName
作为交换URL
最佳答案
您可以考虑使用此选项:
exchangeType
The exchange type:
direct
,fanout
ortopic
for non-partitioned destinations and direct or topic for partitioned destinations.Default: topic.
因此它在我们的配置中看起来像:
spring.cloud.stream.rabbit.bindings.XYZ.consumer.exchangeType=fanout
还有一些其他选项,例如:declareExchange=false
和 bindingRoutingKey
也需要考虑。
关于rabbitmq - 通过 Spring 云流或 rabbitmq 服务器配置将默认交换类型更改为扇出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922878/