我正在尝试为ActiveMQ服务器实施监视服务。我在那里实现了轮询服务,以定期连接到ActiveMQ服务器,并执行队列浏览操作以对ActiveMQ Server进行运行状况检查。

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

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

最佳答案

因此对于故障转移传输:


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

关于java - 服务器不可用时,ActiveMQ Java客户端启动挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41426013/

10-15 05:15