有两个名为 GC1 和 GC2 的客户端使用主题“ GC1Alive " & " GC2Alive ”通过ActiveMQ相互通信 . 他们只是通过使用这些主题发送心跳 .
Purpose
两个GC之间通信的目的是当 GC1 发生故障时, GC2 应该在故障转移场景中替换 GC1's 位置 .
故障转移方案由ActiveMQ自行处理,其中包含以下URL:
URL = "failover://(tcp://<AMQ Broker Url 1>:61616,tcp://<AMQ Broker Url 2>:61616)?timeout=30000";
Problem
当 AMQ Broker 1 & GC1 发生故障时,通信将在 SideB 上 AMQ Broker 2 和 GC2 之间启动 . 因为 GC2 在一段时间间隔之后没有从 GC1 收到任何节拍然后 GC2 接管 GC1 并且立即与 AMQ Broker 2 连接 .
但是当 AMQ Broker 1 & GC1 再次启动时, GC1 会自动将节拍发送到已在URL故障转移方案中定义的 AMQ Broker 1 . 所以现在 GC1 发送心跳到 AMQ Broker 1 和 GC2 发送Heartbeat到 AMQ Broker 2 . 所以 GC1 和 GC2 在上述用例之后并不是多余的 .
我怎么能让他们多余?意味着当 GC1 和 AMQ Broker 再次上升然后 GC1 检查 GC2 的心跳是活着还是死了?
有没有其他设计可以帮助在 GC1 和 GC2 之间 Build 集群?
任何帮助,将不胜感激 .