2012-11-01 136 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