我正在设计一个系统,其中从设备生成的大量实时数据最好通过websockets传输给订阅者。我决定使用Spring STOMP Websockets,因为它可以更快地设置,理解并且支持一些开箱即用的东西,如RabbitMQ和Security。还因为计划将Spring用于另一个REST API,因此Spring作为技术堆栈的选择。RabbitMQ 是我决定使用的消息代理。但是,我找不到有关如何扩展此类系统的大量指导。
我正在考虑的可能解决方案是:
- 在 STOMP 代理实例前面以及 STOMP 代理实例之间添加 HAProxy STOMP Brokers 和 RabbitMQ 集群,HAProxy 将充当 两种情况下的负载均衡器。然后,Spring STOMP 代理将指向 HAProxy 作为代理中继主机。要求是具有高可用性且无数据丢失。
由于我没有 Websockets 的经验,我想获得有关此解决方案听起来是否正确或此处是否缺少任何内容的指导?
注意:在此系统中,消息生产者和使用者实际上是 websocket Java 客户端。我从 https://github.com/nickebbutt/stomp-websockets-java-client 中获取了示例代码,并创建了两个单独的客户端 - 一个仅发送消息,即设备数据(生产者),另一个订阅这些消息(消费者)。因此,两者都使用相同的 websocket URL 连接到同一个 STOMP 代理。通过上述系统实现,客户端将指向HAProxy进行websocket连接。
只是对此进行了更新,我通过创建上述设置进行了实验,它起作用了,即我能够连接到 websocket stomp 服务器/发送/接收数据使用 RabbitMQ 代理并使用 HAProxy 负载平衡,如前所述。在 Spring 中配置的代理主机/端口指向 HAProxy,而 HAProxy 又将请求转发到 RabbitMQ 后端。类似地,websocket客户端通过HAProxy连接到Spring STOMP websocket服务器应用程序。