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

时间:2015-10-21 19:36:51

标签: rabbitmq ibm-mq mqtt stomp spring-websocket

我正在构建一个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

3 个答案:

答案 0 :(得分:1)

瑞安有一些很好的指示。

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

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

答案 1 :(得分:0)

在查看spring-websocket源代码之后,我在这里捅了一下:

  • 更改WebSocketConfig:

    • 删除@EnableWebSocketMessageBroker
    • 添加新注释:@EnableMqttWebSocketMessageBroker
  • 创建扩展AbstractBrokerMessageHandler的MqttBrokerMessageHandler - 建议我们复制和编辑StompBrokerRelayMessageHandler

  • 创建一个EnableMqttWebSocketMessageBroker导入的新类:DelegatingMqttWebSocketMessageBrokerConfiguration
  • DelegatingMqttWebSocketMessageBrokerConfiguration直接扩展AbstractMessageBrokerConfiguration并路由到MqttBrokerMessageHandler

答案 2 :(得分:0)

将此添加到WebSphere Liberty上的server.xml:

<feature>websocket-1.1</feature>