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

标签 rabbitmq stomp spring-cloud-stream

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

在 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,所以下面是几个问题。

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

最佳答案

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

您可以考虑使用此选项:

exchangeType

The exchange type: direct, fanout or topic for non-partitioned destinations and direct or topic for partitioned destinations.

Default: topic.

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

spring.cloud.stream.rabbit.bindings.XYZ.consumer.exchangeType=fanout

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

关于rabbitmq - 通过 Spring 云流或 rabbitmq 服务器配置将默认交换类型更改为扇出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922878/

相关文章:

ssl - 如何为 rabbitmq 添加密码套件支持?

java - 如何从本地docker容器中运行的rabbitmq队列读取消息

spring - 如何从 Spring 4 stomp websocket 方法获取/设置主体和 session 属性

java - Json反序列化错误Spring Boot测试-无法构造实例

java - Spring Cloud Stream发送到Kafka错误控制处理

Spring-boot-starter RabbitMQ 全局错误处理

java - 一个 RabbitMQ 队列上的多个消费者

java - 在spring boot websocket中向特定用户发送通知

java - Jetty 服务器上的 STOMP sockJS 和 ActiveMQ

apache-kafka - 带有状态存储的流媒体应用程序最多需要 1 小时才能重新启动