3

我正在尝试为 ActiveMQ 服务器实现监控服务。在那里我实现了一个轮询服务来定期连接到 ActiveMQ 服务器并执行队列浏览操作来对 ActiveMQ 服务器进行健康检查。

这是我用来启动连接的代码片段。

ActiveMQSslConnectionFactory connectionFactory = new ActiveMQSslConnectionFactory(amqUrl);
connectionFactory.setTrustStore(amqSslTrustStorePath);
connectionFactory.setTrustStorePassword(amqSslTrustStorePasswd);
connectionFactory.setKeyStore(amqSslKeyStorePath);
connectionFactory.setKeyStorePassword(amqSslKeyStorePasswd);
Connection connection = connectionFactory.createConnection(amqUser, amqPasswd);
connection.start();

问题是当服务器不可用时,connection.start()调用会挂起而不会引发错误。出于监控目的,我需要检测到这一点。

我在这里做错了什么还是有更好的方法来做到这一点?

更新:仅当我使用基于故障转移的 ActiveMQ url 时才会发生这种情况(例如:failover:(ssl://192.168.1.112:61617,ssl://192.168.1.112:61619)?randomize=false否则它会按预期工作,即它会引发 JMSException(例如ssl://192.168.1.112:61617:)

4

1 回答 1

1

所以对于故障转移传输:

maxReconnectAttempts:默认值 = -1 | 0

从 ActiveMQ 5.6 开始:默认为 -1,永远重试。0 表示禁用重新连接,例如:尝试连接一次。在 ActiveMQ 5.6 之前:默认为 0,永远重试。所有 ActiveMQ 版本:值 >0 表示在将错误发送回客户端之前的最大重新连接尝试次数。

于 2017-01-02T12:13:09.720 回答