成功故障转移后切换回主远程代理

Posted

技术标签:

【中文标题】成功故障转移后切换回主远程代理【英文标题】:Switching back to the primary remote broker after successful failover 【发布时间】:2012-02-07 09:52:42 【问题描述】:

我们使用的是 Apache ActiveMQ 5.5。 我们有一个运行在 tcp://0.0.0.0:61616 的代理(我们称之为主代理)。该代理执行存储并将消息转发到远程代理。为此,我们有一个从该代理到两个远程代理的网络连接。我们希望其中一个远程代理充当主代理,另一个充当故障转移。这是我们正在使用的网络连接 URI

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

我们正在使用 spring DefaultMessageListenerContainer 来监听消息

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

在正常情况下,当所有代理都启动并运行并向主代理发送消息时,它会被转发到 server1 并被侦听器消费。

如果我们停止 server1 上的代理,则故障转移成功发生,消息被转发到 server2 并被侦听器成功使用。问题是当我们恢复 server1 时,消息继续由主代理转发到 server2。我们的要求是,一旦 server1 启动并运行,主代理应该开始将消息转发到 server1,并且侦听器应该连接回 server1 并使用消息。我们无法将 randomize 更改为 true,因为我们希望一次只有一个 server1 或 server2 处于活动状态。

请告诉我这是否可行以及如何实现。

【问题讨论】:

【参考方案1】:

您需要将选项“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

【讨论】:

以上是关于成功故障转移后切换回主远程代理的主要内容,如果未能解决你的问题,请参考以下文章

Windows Server2016+SqlServer2016搭建AlwaysOn集群

Windows Server2016+SqlServer2016搭建AlwaysOn集群

Windows Server2016+SqlServer2016搭建AlwaysOn集群

使用代理网络中的临时队列的请求/回复模式的 ActiveMQ/Camel 故障转移 - 无法发布到已删除的临时队列

案例分享:数据库镜像故障转移失败

ActiveMQ NMS:当代理关闭时,connection.start() 使用故障转移协议挂起