问题是我定义了一些可能不活动的代理uri。
然后,来自createConnection
的ActiveMQConnectionFactory
不会引发任何异常。我需要处理这种情况,如果由于uri而无法使用createConnection
的情况,则应将我的服务标记为不健康。
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;
}
}
}
最佳答案
因此,您希望创建连接失败并出现异常,但同时也在使用故障转移传输吗?这对您来说似乎不合算吗?
使用故障转移传输会导致创建成功,因为故障转移传输完全按照您要求的方式进行操作,即尝试重复建立连接,直到进行了配置的尝试次数为止。一旦故障转移传输放弃,调用诸如create session之类的方法将阻塞并最终引发错误。或者,您可以设置一个异常侦听器,该异常侦听器将在连接关闭后发出信号,因为故障转移传输用尽了重新连接尝试。