我正在构建一个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
瑞安有一些很好的指示。
主要工作是使用MqttBrokerMessageHandler创建StompBrokerRelayMessageHandler的替代品,该MqttBrokerMessageHandler不仅可以与MQTT代理进行通信,还可以将客户端STOMP帧调整为MQTT,反之亦然。协议足够相似,可以找到共同点,但在尝试之前你不会知道。
请注意,我们确实有针对MQTT支持https://jira.spring.io/browse/SPR-12581的计划,但关键问题是,通过Web进行回退支持所需的SockJS不支持二进制消息。
这是我在审查spring-websocket源代码后对此的抨击: