问题是我定义了一些可能不活动的代理uri。
然后,来自createConnectionActiveMQConnectionFactory不会引发任何异常。我需要处理这种情况,如果由于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之类的方法将阻塞并最终引发错误。或者,您可以设置一个异常侦听器,该异常侦听器将在连接关闭后发出信号,因为故障转移传输用尽了重新连接尝试。

09-10 05:59
查看更多