问题是我定义了一些可能处于非 Activity 状态的代理 uri。
然后 ActiveMQConnectionFactory
中的 createConnection
不会抛出任何异常。我需要处理这种情况,如果 createConnection
由于 uri 不可用而无法正常工作,那么我应该将我的服务标记为不健康。
boolean healthy = true;
Connection conn = null;
try {
final ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("failover:(tcp://localhost:8080)?jms.prefetchPolicy.all=0&initialReconnectDelay=1000&maxReconnectDelay=30000&maxReconnectAttempts=20");
conn = factory.createConnection(this.userName, this.password);
} catch (JMSException e) {
healthy = false;
} finally {
if (conn != null) {
try {
conn.close();
} catch (JMSException e) {
healthy = false;
}
}
}
最佳答案
所以您希望创建连接失败并出现异常,但您也在使用故障转移传输?你不觉得这很矛盾吗?
故障转移传输的使用导致创建成功,因为故障转移传输正在执行您要求它做的事情,即重复尝试建立连接,直到完成配置的尝试次数。一旦故障转移传输放弃,调用类似创建 session 的方法将阻塞并最终抛出错误。或者,您可以设置一个异常监听器,一旦连接关闭,该监听器就会发出信号,因为故障转移传输用完了重新连接尝试。
关于java - ActiveMQ 不活跃代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573271/