将默认交换类型更改为通过 Spring 云流或 rabbitmq 服务器配置的扇出



>我有两个微服务 学生和老师

在学生微服务中,我创建了用于交换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。随着服务数量的增加,这些配置的数量也在增加。

我想将默认的交换类型更改为扇出,所以以下是几个问题。

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

有一些关于此事的文档: 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

还有其他一些选择,例如:declareExchange=falsebindingRoutingKey也要考虑。

最新更新