问题是我已经定义了一些代理uri,该代理uri可能不活跃。
这样createConnection
中的ActiveMQConnectionFactory
就不会抛出任何异常。我需要处理这种情况,如果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;
}
}
}
答案 0 :(得分:1)
因此,您希望创建连接失败并出现异常,但同时也在使用故障转移传输吗?这对您来说不是很奇怪吗?
使用故障转移传输会导致创建成功,因为故障转移传输完全按照您要求的方式进行操作,即尝试重复建立连接,直到进行了配置的尝试次数为止。一旦故障转移传输放弃,调用诸如create session之类的方法将阻塞并最终引发错误。或者,您可以设置一个异常侦听器,该异常侦听器将在连接关闭后发出信号,因为故障转移传输用尽了重新连接尝试。