rabbitmq - Spring STOMP Broker Relay + RabbitMQ Cluster 和 HA 代理前端用于负载平衡

标签 rabbitmq scalability spring-websocket spring-messaging

我正在设计一个系统,其中从设备生成的大量实时数据最好通过 websockets 传输给订阅者。我决定使用 Spring STOMP Websockets,因为它可以更快地设置、理解并支持一些开箱即用的功能,例如 RabbitMQ 和 Security。也因为计划是将 Spring 用于另一个 REST API,所以 Spring 作为技术堆栈的选择。 RabbitMQ 是我决定的消息代理。但是,我找不到有关如何扩展此类系统的大量指导。

我正在考虑的可能解决方案是:

  • 在 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 连接。

    最佳答案

    只是对此进行了更新,我通过创建上述设置进行了实验并且它起作用了,即我能够使用 RabbitMQ 代理连接到 websocket stomp 服务器/发送/接收数据,并使用 HAProxy 负载平衡,如上所述。 Spring 中配置的代理主机/端口指向 HAProxy,HAProxy 又将请求转发到 RabbitMQ 后端。同样,websocket 客户端通过 HAProxy 连接到 Spring STOMP websocket 服务器应用程序。

    关于rabbitmq - Spring STOMP Broker Relay + RabbitMQ Cluster 和 HA 代理前端用于负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43388923/

    相关文章:

    ruby - 指定死信交换的 AMQP gem

    rabbitmq - 为什么我们需要 RabbitMQ 中的路由键?

    gcc - make -j distcc 是否可以扩展超过 5 倍?

    java - 使WebSocket发送非阻塞

    java - 确保收到消息

    php - 客户端无法连接到本地主机上的 RabbitMQ 服务器

    docker - 错误:在为rabbitmq运行docker容器时出现function_clause

    functional-programming - 原始函数式语言中的 MapReduce 的可扩展性如何?

    c# - 线程池中大量线程处于等待状态,导致性能问题

    java - Spring websocket - 来自集群的 sendToUser 无法从备份服务器工作