2011-07-27 30 views
3

从ActiveMQ连接创建会话对象时是否有任何设置超时的方法?ActiveMQ createSession超时

我使用的外观的代码如下:

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调用将被阻止。我可以在另一个线程上执行它以避免应用程序被阻塞,但我想我会问是否有一种“更干净”的方式。

干杯, 最大

回答

2

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

+2

createConnection正常工作。它只能挂在createSession()... – Max

+0

我已经使用ActiveMQ几年了,从来没有遇到过这样的事情。它总是在createConnection()时失败,否则它一路连接。你是否在与经纪人相同的JVM中做某件事,可能会让它停滞不前? –

+2

我与尝试永久重新连接的故障转移有同样的问题。我将transport.startupMaxReconnectAttempts = 6(或其他选择的)作为查询字符串添加到我们活动的mq服务url的末尾,以防止无限循环。现在它失败了。 – lcrepas