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