2013-05-30 153 views
5

我试用兔子mq,发现它相当不错。看看HA页面,我发现交换/队列复制效果很好。RabbitMQ客户端负载平衡

我很担心我必须使用TCP负载平衡器来平衡节点之间的负载。它是否正确?

我想在具有“全部复制”策略的集群中拥有2个节点。

我希望发布者或消费者能够以类似循环的行为连接到所有节点。不幸的是,客户端API只允许为每个连接设置一台主机。

有什么(第三方也许?)连接池像解决方案,所以发布者发布和消费者从所有节点消耗?

+0

你有没有想出一个解决方案吗? –

+0

相关 - http://stackoverflow.com/a/32478091/830964。 –

回答

3

我还没有看到任何为AMQP/RabbitMQ做连接池的客户端。 AMQP通过频道在一个进程中处理多个发布者/消费者,并且一些客户端使其易于使用,但似乎无法处理使用连接池的节点的自动故障转移。

在群集中,不需要连接群集​​中的所有节点,消耗和发布操作将在群集内正确路由。对于尝试管理具有多个订阅的单个或多个进程(每个连接至少占用一个进程)的尝试从来没有成为我的最高优先级。随着多个进程消耗,每个进程随机连接到RabbitMQ,如果其中一个RabbitMQ节点发生故障,您将能够保持可用性。

出版商长期连接可以轻易地重新连接,如果故障检测,使得小于中断第二,在什么我工作过上不会有问题足够小。

从几年的使用情况来看,重新连接到新主机是在故障转移期间更简单的问题,难题是管理应用程序中关于现有AMQP连接的状态。在实践中,我只保留了可用主机的列表,并为每个新连接选择下一个。任何时候连接关闭只是选择一个新的主机,然后再试一次。它的意思是很短的时间你不能发布,如果你不得不在PHP中建立新的连接,那么可能会更困难。

由于flow control TCP负载平衡器可能比他们的价值更麻烦。 TCP背压可能无法通过LB使发布商发布速度比RabbitMQ更快。在不科学的测试中,当RabbitMQ处于负载平衡器后面时,我遇到了更多与RabbitMQ稳定性有关的问题,然后客户端直接连接。