ActiveMQ故障转移:如何检测应用程序何时启动并且找不到代理



我正在使用ActiveMQ故障转移,例如

failover:(tcp://host1:61616,tcp://host2:61616)

当主机1和主机2都不可用时,我想发出警报。

如果应用程序已经连接到代理,则可以通过TransportListener检测它何时故障转移。在最初的连接过程中,这是不可能的。它将挂起,反复重试每个经纪人。这是我想要的行为,因为我希望它继续尝试连接,但我也想被通知它有问题,这样我就可以提醒,有人可以调查它。

一种解决方案是使用

failover:(tcp://host1:61616,tcp://host2:61616)?startupMaxReconnectAttempts=1

这意味着它将尝试每个主机,然后抛出一个异常,我的应用程序可以通过发出警报然后尝试再次连接来处理这个异常。这并不理想,因为我的应用程序必须有效地复制ActiveMQ重新连接逻辑。

有没有更好的方法来检测初始连接时的代理问题?

简单回答:不,从客户端(应用程序)启动的角度来看是不可能知道的。

长话短说:作为一个应用程序,你只会知道什么时候:你根本没有可用的代理(通过startupMaxReconnectAttempts),或者你什么时候从一个代理切换到另一个。这是预期和期望的行为,因为故障转移机制的全部目的是向消费者隐藏所有这些。

可能有一些方法(例如使用动态代理网络),但这需要比您提出的解决方案更多的逻辑。

我认为你试图用错误的工具解决问题:使用故障转移机制(具有最大重新连接和适当的超时)只会确保你在出现真正的问题时得到通知(根本没有可用的代理)。其他代理的"运行状况"或"连接"需要一个单独的机制(在系统级别-使用监控工具-或在应用程序级别-开发一个小机制来保持uri列表中所有代理的有效性)

最新更新