如何修改 spring-websocket 以通过 MQTT 而不是 STOMP 与代理交互?
How to modify spring-websocket to interface with broker via MQTT instead of STOMP?
我正在构建一个 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
和registerStompEndpoints
in AbstractWebSocketMessageBrokerConfigurer
这是我在查看 spring-websocket 源代码后对此的尝试:
更改 WebSocketConfig:
- 移除@EnableWebSocketMessageBroker
- 添加新注释:@EnableMqttWebSocketMessageBroker
创建扩展 AbstractBrokerMessageHandler 的 MqttBrokerMessageHandler -- 建议我们复制并编辑 StompBrokerRelayMessageHandler
- 创建一个新的 class EnableMqttWebSocketMessageBroker 导入:DelegatingMqttWebSocketMessageBrokerConfiguration
- DelegatingMqttWebSocketMessageBrokerConfiguration 直接扩展 AbstractMessageBrokerConfiguration 并路由到 MqttBrokerMessageHandler
Ryan 有一些很好的建议。
主要工作是用 MqttBrokerMessageHandler 创建 StompBrokerRelayMessageHandler 的替代品,它不仅与 MQTT 代理对话,而且使客户端 STOMP 帧适应 MQTT,反之亦然。这些协议非常相似,也许可以找到共同点,但只有尝试才能知道。
请注意,我们确实有 MQTT 支持的计划 https://jira.spring.io/browse/SPR-12581,但关键问题是 Web 上需要用于回退支持的 SockJS 不支持二进制消息。
将此添加到 WebSphere Liberty 上的 server.xml:
<feature>websocket-1.1</feature>
我正在构建一个 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
和registerStompEndpoints
in AbstractWebSocketMessageBrokerConfigurer
这是我在查看 spring-websocket 源代码后对此的尝试:
更改 WebSocketConfig:
- 移除@EnableWebSocketMessageBroker
- 添加新注释:@EnableMqttWebSocketMessageBroker
创建扩展 AbstractBrokerMessageHandler 的 MqttBrokerMessageHandler -- 建议我们复制并编辑 StompBrokerRelayMessageHandler
- 创建一个新的 class EnableMqttWebSocketMessageBroker 导入:DelegatingMqttWebSocketMessageBrokerConfiguration
- DelegatingMqttWebSocketMessageBrokerConfiguration 直接扩展 AbstractMessageBrokerConfiguration 并路由到 MqttBrokerMessageHandler
Ryan 有一些很好的建议。
主要工作是用 MqttBrokerMessageHandler 创建 StompBrokerRelayMessageHandler 的替代品,它不仅与 MQTT 代理对话,而且使客户端 STOMP 帧适应 MQTT,反之亦然。这些协议非常相似,也许可以找到共同点,但只有尝试才能知道。
请注意,我们确实有 MQTT 支持的计划 https://jira.spring.io/browse/SPR-12581,但关键问题是 Web 上需要用于回退支持的 SockJS 不支持二进制消息。
将此添加到 WebSphere Liberty 上的 server.xml:
<feature>websocket-1.1</feature>