Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActiveMQ故障转移:如何检测应用程序何时启动且找不到代理_Java_Jms_Activemq - Fatal编程技术网

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

Java ActiveMQ故障转移:如何检测应用程序何时启动且找不到代理,java,jms,activemq,Java,Jms,Activemq,我正在使用ActiveMQ故障转移 failover:(tcp://host1:61616,tcp://host2:61616) 我想在主机1和主机2都不可用时发出警报 如果应用程序已连接到代理,则可以通过TransportListener检测它何时故障转移。在初始连接期间,不可能进行相同的操作。它只会挂起,反复重试每个经纪人。这是我想要的行为,因为我希望它继续尝试连接,但是我也希望它有问题,这样我可以提醒,有人可以调查它 一个解决办法是使用 failover:(tcp://host1:616

我正在使用ActiveMQ故障转移

failover:(tcp://host1:61616,tcp://host2:61616)
我想在主机1和主机2都不可用时发出警报

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

一个解决办法是使用

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


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

简短回答:没有,无法从客户端(应用程序)启动的角度了解

详细回答:作为一个应用程序,您将只知道何时:您根本没有可用的代理(通过startupMaxReconnectAttempts),或者何时从一个代理切换到另一个代理。这是预期和期望的行为,因为故障切换机制的全部目的是对使用者隐藏所有这些

可能有一些方法(用于eg),但这需要比您提出的解决方案更多的逻辑

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

不确定您在问什么…startupMaxReconnectAttempts听起来好像给了您想要的错误反馈。如果您将其设置为1,则不会尝试重新连接…正如我所说,startupMaxReconnectAttempts=1是一种解决方案。我的问题是,有没有更好的方法在应用程序启动时检测不可用的代理?即,在发出代理不可用警报后,不需要我的应用程序代码来处理重新连接。类似于TransportListener用于检测故障转移的功能。此外,一种检测单个经纪人不可用的方法也很有用。