【问题标题】:ActiveMQ createSession timeoutActiveMQ createSession 超时
【发布时间】:2011-10-13 21:16:45
【问题描述】:

从 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();

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

【问题讨论】:

    标签: java session connection activemq


    【解决方案1】:

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

    【讨论】:

    • 我已经使用 ActiveMQ 几年了,从来没有遇到过这样的事情。它总是在 createConnection() 处失败,否则它会一直连接。您是否在与代理相同的 JVM 中做一些可能使其停止的事情?
    • 我在故障转移尝试永远重新连接时遇到了同样的问题。我将 transport.startupMaxReconnectAttempts=6 (或任何你选择的)作为查询字符串添加到我们活动的 mq 服务 url 的末尾,以防止无限循环。现在它适当地失败了。
    【解决方案2】:

    正如 lcrepas 在他的评论中指出的那样,这应该是正确的答案:

    transport.startupMaxReconnectAttempts=1 添加到您的连接字符串。

    同时添加transport.maxReconnectAttempts=1

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 1970-01-01
      • 2016-12-31
      • 2019-03-08
      • 2012-08-22
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多