我正在构建一个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
和AbstractWebSocketMessageBrokerConfigurer
答案 0 :(得分:1)
主要工作是使用MqttBrokerMessageHandler创建StompBrokerRelayMessageHandler的替代品,MqttBrokerMessageHandler不仅可以与MQTT代理进行通信,还可以将客户端STOMP帧调整为MQTT,反之亦然。这些协议足够相似,可以找到共同点,但在你尝试之前你不会知道。
请注意,我们确实有针对MQTT支持的计划https://jira.spring.io/browse/SPR-12581,但关键问题是,通过Web进行回退支持所需的SockJS不支持二进制消息。
答案 1 :(得分:0)
在查看spring-websocket源代码之后,我在这里捅了一下:
更改WebSocketConfig:
创建扩展AbstractBrokerMessageHandler的MqttBrokerMessageHandler - 建议我们复制和编辑StompBrokerRelayMessageHandler
答案 2 :(得分:0)
将此添加到WebSphere Liberty上的server.xml:
<feature>websocket-1.1</feature>