ActiveMQ createSession 超时

Max*_*Max 5 java connection session activemq-classic

从 ActiveMQ 连接创建会话对象时,有没有设置超时的方法?

我使用的代码如下所示:

ConnectionFactory factory = Settings.getJmsConnectionFactory(ip);
connection = factory.createConnection();
// insert timeout here
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(Settings.Topic);
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(this);
connection.start();
Run Code Online (Sandbox Code Playgroud)

只要消息服务器已经启动,这就可以正常工作。否则 createSession 调用将阻塞。我可以在另一个线程上执行它以避免应用程序阻塞,但我想我会问是否有一种“更干净”的方法来做到这一点。

干杯,马克斯

Rya*_*art 2

您确定它在 createSession() 调用中吗?如果服务器不可用,则 createConnection() 应该会失败。如果您没有运行服务器,并且正在使用故障转移传输,它将尝试使用默认设置永远重新连接。查看故障转移传输的传输选项,了解如何修复它。

  • 我在尝试永远重新连接时遇到了同样的问题。我将 Transport.startupMaxReconnectAttempts=6 (或您选择的任何内容)作为查询字符串添加到我们的活动 mq 服务 url 的末尾,以防止无限循环。现在它适当地失败了。 (4认同)