我正在使用ActiveMQ故障转移,例如
failover:(tcp://host1:61616,tcp://host2:61616)
当host1和host2都不可用时,我想提醒。
如果应用程序已连接到代理,您可以通过TransportListener检测它何时进行故障转移。在初始连接期间不可能这样做。它会挂起,反复重试每个经纪人。这是期望的行为,因为我希望它继续尝试连接,但是我也希望得到通知它有问题,以便我可以提醒,有人可以调查它。
一种解决方案是使用
failover:(tcp://host1:61616,tcp://host2:61616)?startupMaxReconnectAttempts=1
这意味着它将尝试每个主机,然后抛出异常,我的应用程序可以通过警告然后再次尝试连接来处理。这并不理想,因为我的应用程序必须有效地复制ActiveMQ重新连接逻辑。
有没有更好的方法来检测初始连接时的代理问题?
答案 0 :(得分:3)
简短回答:不,没有办法从客户端(应用程序)启动角度了解。
答案很长:作为一个应用程序,您只会知道:您根本没有可用的代理(通过startupMaxReconnectAttempts),或者当您从一个代理切换到另一个代理时。这是预期和期望的行为,因为故障转移机制的重点是将所有这些隐藏起来。
可能有一些方法(例如使用dynamic network of brokers),但这需要比你提出的解决方案更多的逻辑。
我认为您正在尝试用错误的工具解决问题:使用故障转移机制(具有最大重新连接和适当的超时)将确保在出现问题时(无法提供任何代理)收到通知。 其他经纪人的“健康”或“连通性”需要一个单独的机制(在系统级别 - 使用监控工具 - 或在应用程序级别 - 开发一个小机制来为uri列表中的所有经纪人保持活力)< / p>