2012-01-11 68 views
4

我們正在使用Apache ActiveMQ 5.5。 我們有一個在tcp://0.0.0.0:61616運行的代理(讓我們稱之爲Main Broker)。該代理會向遠程代理髮送存儲和轉發消息。爲此,我們有一個從此代理到兩個遠程代理的網絡連接。我們希望其中一個遠程代理作爲主服務器,而其他服務器則作爲故障切換服務器。這是網絡連接URI,我們使用成功故障轉移後切換回主要遠程代理

static:(failover://(tcp://<b>server1</b>:61617,tcp://<b>server2</b>:61617)?randomize=false) 

我們正在使用彈簧使用DefaultMessageListenerContainer監聽消息

failover://(tcp://<b>server1</b>:61617,tcp://<b>server2</b>:61617)?randomize=false 

在正常情況下,當所有的券商和運行,一條消息發送給Main Broker,它將被轉發到server1並被偵聽器使用。

如果我們停止server1上的代理,則故障轉移正在成功進行,並且消息正在轉發到server2並被偵聽器成功使用。問題是當我們將server1備份時,消息繼續由主代理轉發到server2。我們的要求是,一旦server1啓動並運行,Main代理應該開始將消息轉發到server1,並且監聽器應該連接回server1並使用消息。我們不能將randomize更改爲true,因爲我們只希望其中一個server1或server2一次處於活動狀態。

請讓我知道這是否可能以及如何。

回答

4

您需要將選項「priorityBackup」設置爲true。您的URI將變爲:

static:(failover://(tcp://server1:61617,tcp://server2:61617)?randomize=false&priorityBackup=true) 

這將使server1(服務器列表中的第一個)優先級備份。當server1發生故障時,他將故障轉移到server2,但不斷嘗試重新連接到server1。因此,當它再次返回時,他將切換回server1。此選項僅在版本5.6

的完整細節在這裏: http://activemq.apache.org/failover-transport-reference.html

還有一個有趣的博客在這裏: http://bsnyderblog.blogspot.com/2010/10/new-features-in-activemq-54-automatic.html