【问题标题】:Load-balanced connection between Spring AMQP java client and nodes of RabbitMQ cluster?Spring AMQP java客户端和RabbitMQ集群节点之间的负载平衡连接?
【发布时间】:2014-09-19 06:04:55
【问题描述】:

我知道 Spring AMQP 很好地支持故障转移,但我的问题是,如何对 RabbitMQ 代理的消费者端和集群节点之间的连接进行负载平衡?

我们将不胜感激。

问候。

【问题讨论】:

    标签: java spring rabbitmq amqp spring-amqp


    【解决方案1】:

    根据RabbitMQ Clustering Guide

    客户端可以正常连接到集群中的任何节点。如果该节点发生故障并且集群的其余部分仍然存在,那么客户端应该会注意到已关闭的连接,并且应该能够重新连接到集群中一些幸存的成员。通常,不建议将节点主机名或 IP 地址烘焙到客户端应用程序中:这会带来不灵活性,并且如果集群配置发生变化或集群中的节点数量发生变化,则需要编辑、重新编译和重新部署客户端应用程序。相反,我们建议使用更抽象的方法:这可以是具有非常短的 TTL 配置的动态 DNS 服务,或者是普通的 TCP 负载均衡器,或者是使用起搏器或类似技术实现的某种移动 IP。一般来说,管理与集群内节点的连接这一方面超出了 RabbitMQ 本身的范围,我们建议使用专门为解决这些问题而设计的其他技术。

    另请参阅此答案:RabbitMQ client load balancing

    还有来自here的引用:

    在它前面创建一个负载均衡并映射后端 MQ 实例。您可以选择 HAProxy、Apache 或 Nginx 或您在组织中使用的任何硬件负载均衡器。

    如果服务器在 VPC 内的 AWS 中运行,则选择内部负载均衡器。更新应用程序以指向负载均衡器端点。

    正如您所见,互联网上有足够多的信息。对了,我没有在这里发表我的意见,但看起来实现所需的解决方案并没有太大的困难。

    只需为 Rabbit 节点配置一些负载均衡器,然后为客户端使用其中的 url。

    【讨论】:

    • 您好Artem,非常感谢您的及时回复,关于您提到的方法和链接,我会尝试一下。还有一个问题:我以前使用 x-ha-policy=all 来声明 HA 队列,效果很好。但是最近我发现这个选项不再起作用了。你能告诉我为什么吗? spring AMQP API 或 rabbitMQ 有什么变化吗?
    • 确实如此。自 RabbitMQ 3.0 以来,该政策已更改:rabbitmq.com/blog/2012/11/19/breaking-things-with-rabbitmq-3-0
    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2020-02-25
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多