如何通过MQTT而不是STOMP修改spring-websocket与代理接口?

问题描述 投票:5回答:2

我正在构建一个spring-websocket应用程序,它目前通过STOMP协议使用RabbitMQ作为消息代理。我们组织的其余部分主要使用IBM Websphere MQ作为消息代理,因此我们希望将其转换为RabbitMQ。但是,Websphere MQ不支持STOMP协议,这是spring-websocket的默认协议。 MQTT似乎是最容易使用的支持协议。理想情况下,我们的前端Web客户端将继续使用STOMP,但如果需要,我也可以将它们迁移到MQTT。

我需要覆盖哪些类来通过MQTT而不是STOMP与代理进行spring-websocket接口? This article提供了一些我应该扩展AbstractMessageBrokerConfiguration的一般指导,但我不清楚从哪里开始。

目前我正在使用标准配置方法:registry.enableStompBrokerRelay中的registerStompEndpointsAbstractWebSocketMessageBrokerConfigurer

rabbitmq ibm-mq mqtt stomp spring-websocket
2个回答
1
投票

瑞安有一些很好的指示。

主要工作是使用MqttBrokerMessageHandler创建StompBrokerRelayMessageHandler的替代品,该MqttBrokerMessageHandler不仅可以与MQTT代理进行通信,还可以将客户端STOMP帧调整为MQTT,反之亦然。协议足够相似,可以找到共同点,但在尝试之前你不会知道。

请注意,我们确实有针对MQTT支持https://jira.spring.io/browse/SPR-12581的计划,但关键问题是,通过Web进行回退支持所需的SockJS不支持二进制消息。


0
投票

这是我在审查spring-websocket源代码后对此的抨击:

  • 更改WebSocketConfig: 删除@EnableWebSocketMessageBroker 添加新注释:@EnableMqttWebSocketMessageBroker
  • 创建扩展AbstractBrokerMessageHandler的MqttBrokerMessageHandler - 建议我们复制和编辑StompBrokerRelayMessageHandler
  • 创建一个EnableMqttWebSocketMessageBroker导入的新类:DelegatingMqttWebSocketMessageBrokerConfiguration
  • DelegatingMqttWebSocketMessageBrokerConfiguration直接扩展AbstractMessageBrokerConfiguration并路由到MqttBrokerMessageHandler
© www.soinside.com 2019 - 2024. All rights reserved.