2 stomp rabbitmq spring-cloud-stream
我有两个微服务 Student 和 Teacher
在学生微服务中,我创建了 MessageSink 用于交换 XYZ
@Input("XYZ")
SubscribableChannel xyz();
Run Code Online (Sandbox Code Playgroud)
在教师微服务中,我将交换 XYZ 配置为扇出
应用程序属性
spring.cloud.stream.rabbit.bindings.XYZ.producer.exchangeType=fanout
spring.cloud.stream.bindings.XYZ.contentType=application/json
Run Code Online (Sandbox Code Playgroud)
但我在这里面临的问题是学生服务在教师服务之前启动,并且它正在创建类型为 Topic 的 XYZ 交换。
为了解决这个问题,我在两个服务(即消费者和生产者)中都添加了 exchangeType。随着服务数量的增加,这些配置的数量也在增加。
我想将默认的 exchangeType 更改为扇出,因此以下是几个问题。
exchangeType为扇出而不是主题spring-cloud-stream?exchangeType通过rabbit-mq配置更改默认值?exchangeTypeastopic和 routing key #。但是这种方法的问题是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
Run Code Online (Sandbox Code Playgroud)
还有一些其他的选择,比如:declareExchange=false并且bindingRoutingKey也要考虑。
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |