通过 Spring Cloud 流或 rabbitmq 服务器配置将默认 exchangeType 更改为扇出

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 更改为扇出,因此以下是几个问题。

  1. 有没有办法将默认值更改exchangeType为扇出而不是主题spring-cloud-stream
  2. 有没有办法exchangeType通过rabbit-mq配置更改默认值?
  3. 作为一种解决方法,我计划保留exchangeTypeastopic和 routing key #。但是这种方法的问题是stomp客户端为每个浏览器主机创建队列,队列名称为stomp-subscription-randomString空路由键。那么有没有办法在订阅流的同时提供路由密钥?我/exchange/exchangeName用作交换URL

Art*_*lan 6

关于此事有一些文档:https : //docs.spring.io/spring-cloud-stream/docs/Elmhurst.RELEASE/reference/htmlsingle/#_configuration_options_4

您可以考虑使用此选项:

交换类型

交换类型:directfanouttopic用于非分区目的地,直接或主题用于分区目的地。

默认:主题。

因此它将在我们的配置中看起来像:

spring.cloud.stream.rabbit.bindings.XYZ.consumer.exchangeType=fanout
Run Code Online (Sandbox Code Playgroud)

还有一些其他的选择,比如:declareExchange=false并且bindingRoutingKey也要考虑。