我有以下问题:我尝试使用以下代码连接到ActiveMQ代理(现在已关闭)
connectionFactory = new ActiveMQConnectionFactory(this.url + "?timeout=2000"); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); LOGGER.info("Connected to " + this.url);
问题是超时没有任何影响
connection.start()
永远被封锁了.我检查了ActiveMQ日志,发现了以下信息:
2013-12-20 01:49:03,149 DEBUG [ActiveMQ Task-1] (FailoverTransport.java:786) - urlList connectionList:[tcp://localhost:61616?timeout=2000], from: [tcp://localhost:61616?timeout=2000] 2013-12-20 01:49:03,149 DEBUG [ActiveMQ Task-1] (FailoverTransport.java:1040) - Connect fail to: tcp://localhost:61616?timeout=2000, reason: java.lang.IllegalArgumentException: Invalid connect parameters: {timeout=2000}
timeout参数在http://activemq.apache.org/cms/configuring.html中指定
有谁知道如何将超时参数传递给ActiveMQConnectionFactory?或者如何为connection.start()设置超时?谢谢!
更新:我在Stackoverflow上发现了这一点:ActiveMQ - 恢复连接后的CreateSession故障转移超时.我试了但是引发了以下异常:
javax.jms.JMSException: Could not create Transport. Reason: java.lang.IllegalArgumentException: Invalid connect parameters: {transport.timeout=5000} at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
我使用maven repo的ActiveMQ 5.8.0
在尝试设置超时属性时,似乎您的网址仍然无效.
如果您正在尝试拥有一个故障转移URL,它看起来就像是因为它正在进入故障转移代码,那么您可能正在寻找initialReconnectDelay(可能还有maxReconnectAttempts,如果服务器仍然关闭后会抛出异常)达到了尝试次数).
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover://(tcp://localhost:61616)?initialReconnectDelay=2000&maxReconnectAttempts=2");