我使用spring-amqp连接到rabbitmq节点(A,B和C)的集群。假设群集中的一个rabbitmq节点关闭(C关闭)。此外,假设有两个消息接收器(Receiver_1和Receiver_2)正在使用与节点C的连接。当C发生故障时,Receiver_1和Receiver_2是否会自动切换其连接以连接到A或B?当C再次出现时会发生什么?是否有一些接收器连接被重新分配以使用C?
答案 0 :(得分:2)
RabbitMQ本身不支持故障转移。当RabbitMQ集群中的节点发生故障时,将选出一个新的主服务器,并且业务将照常继续用于集群的其余部分。
因此,在您的示例中,Receiver_1和Receiver_2将需要处理C已关闭的情况,并且知道尝试连接到A或B。
您可以在此处查看相关的官方文档:http://www.rabbitmq.com/clustering.html#clients
就个人而言,我使用haproxy(http://haproxy.1wt.eu/)来加载所有客户端的连接平衡。 haproxy不仅会负载平衡,还会自动检测节点何时脱机并将所有连接重新路由到另一个活动节点。话虽如此,它将无法实现。应用程序仍将断开连接,因此您需要捕获异常并尝试重新连接。