>我有两个微服务 学生和老师
在学生微服务中,我创建了用于交换XYZ的消息接收器
@Input("XYZ")
SubscribableChannel xyz();
在教师微服务中,我已将交换XYZ配置为扇出
应用程序属性
spring.cloud.stream.rabbit.bindings.XYZ.producer.exchangeType=fanout
spring.cloud.stream.bindings.XYZ.contentType=application/json
但是我在这里面临的问题是学生服务在教师服务之前开始,并且正在创建带有主题类型的XYZ交换。
为了解决这个问题,我在两个服务(即消费者和生产者)中添加了exchangeType。随着服务数量的增加,这些配置的数量也在增加。
我想将默认的交换类型更改为扇出,所以以下是几个问题。
- 有没有办法将默认
exchangeType
更改为扇出而不是spring-cloud-stream
中的主题? - 有没有办法通过 rabbit-mq 配置更改默认
exchangeType
? - 作为解决方法,我计划将
exchangeType
保留为topic
和路由密钥#
。但这种方法的问题在于stomp
客户端正在为每个浏览器主机创建队列,队列名称为stomp-subscription-randomString
,路由键为空。那么有没有办法在订阅流时提供路由密钥?我使用/exchange/exchangeName
作为交换URL
有一些关于此事的文档: https://docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#_configuration_options_4
您可以考虑使用此选项:
交易所类型
交换类型:
direct
、fanout
或topic
用于非分区目标,直接或主题用于分区目标。默认值:主题。
因此,它将在我们的配置中看起来像:
spring.cloud.stream.rabbit.bindings.XYZ.consumer.exchangeType=fanout
还有其他一些选择,例如:declareExchange=false
和bindingRoutingKey
也要考虑。