2017-06-16 30 views
0

我有一個Rabbitmq集羣設置(沒有HA)。我的客戶是Spring應用程序,它提供了一個開箱即用的故障轉移機制,它連接到下一個可用節點。在RabbitMQ中的所有節點上的隊列聲明

由於隊列沒有鏡像,因此如果我預先聲明隊列,並且當第一個節點關閉時,連接將建立到第二個節點,那麼是否可以。這有意義嗎?

另一個問題,可以說我有一個負載平衡頂部的Rabbitmq羣集。我的應用程序使用負載平衡連接。將隊列在所有節點上聲明還是將根據LB的路由策略在節點上聲明?

回答

0

對於第一種情況,是的,隊列將在連接建立時在故障轉移代理實例上聲明。

如果要在所有節點上預先聲明,則每個連接工廠都需要一個連接工廠,而每個連接工廠需要一個RabbitAdmin

您還需要使每個連接打開(RabbitAdmin s註冊自己作爲連接偵聽器)。

您可以通過在每個連接工廠上添加一個bean來實現SmartLifecycle並調用createConnection()

您還可以選擇性地聲明元素。請參閱Conditional Declaration

默認情況下,所有的隊列,交流,並綁定在應用環境中的所有RabbitAdmin情況下(有auto-startup="true")聲明。

從1.2版本開始,可以有條件地聲明這些元素。當應用程序連接到多個代理並需要指定哪個代理應該聲明特定的元素時,這是特別有用的。

相關問題