2012-11-01 102 views
0

我使用spring-amqp连接到rabbitmq节点(A,B和C)的集群。假设群集中的其中一个rabbitmq节点关闭(C关闭)。此外,假设有两个消息接收器(Receiver_1和Receiver_2)正在使用连接到节点C.当C关闭时,Receiver_1和Receiver_2是否自动将其连接切换为连接到A或B?当C再次出现时会发生什么?一些接收器连接是否被重新分配以使用C?spring-amqp HA支持

回答

1

故障转移不被RabbitMQ本身支持。当RabbitMQ集群中的某个节点出现故障时,将选择一个新的主节点,业务将像往常一样继续处理集群其余部分。

因此,在您的示例中,Receiver_1和Receiver_2需要处理C已关闭的情况,并知道尝试连接到A或B。

你可以看到官方文档此位置:http://www.rabbitmq.com/clustering.html#clients

就个人而言,我使用HAProxy的(http://haproxy.1wt.eu/)加载平衡对我所有的客户的连接。 haproxy不仅会负载均衡,而且会自动检测节点何时离线并将所有连接重新路由到另一个活动节点。这就是说,它不会是无缝的。应用程序仍然会断开连接,因此您需要捕获异常并尝试重新连接。

+0

你说的对RabbitMQ不支持故障转移。从spring-amqp客户端文档看来,它看起来像支持故障转移 - 但不清楚节点故障时连接是否会被负载平衡。 – Skynet

+0

如何捕捉异常并尝试重新连接?你是否抓住了ShutdownSignalException – Praan