2011-04-10 63 views
1

要尝试减轻应用程序中ActiveMQ连接问题期间可能出现的任何挂起问题,我正在寻找将以下参数添加到我的应用程序中的代理连接字符串中的操作:ActiveMQ NMS:在故障转移传输中使用transport.requesttimeout

?transport.requesttimeout=10000 

根据this resource,这看起来好像有助于处理这些事件。

不过,我似乎无法得到这个我目前的故障切换连接字符串,它看起来像这样的工作:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true 

中添加它正是如此:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true&transport.requesttimeout=10000 

,或者类似这样的:

failover:(tcp://masterbroker:61616?transport.requesttimeout=10000,tcp://slavebroker:61616?transport.requesttimeout=10000)?keepAlive=true 

......两者似乎都会导致NMS异常或连接失败。

这似乎是一个相对平凡的问题,但我怎样才能在这种类型的连接字符串中指定传输特定的指令?

+0

请看http://stackoverflow.com/a/10893701/823040。对于故障转移模式,您需要** transport.startupMaxReconnectAttempts **,** transport.timeout **或相关选项。完整的选项列表:http://activemq.apache.org/nms/activemq-uri-configuration.html。 Transport.requesttimeout不是故障转移协议的有效指令。 – sgnsajgon 2014-08-21 20:41:33

回答

1

当您问这些问题时,您应该始终添加您使用的NMS.ActiveMQ版本,因为版本cam之间的行为有所不同。假设你使用的是最新版本,如果你试图连接到一个代理,并且它在大约10秒后没有运行,那么我期望第一种形式的NMSException,这就是URI告诉它做的事情,第二个URI是无效的,因为适用于故障转移配置的内部URI的唯一选项是被称为传输类型的选项,在这种情况下为TCP。

这可能是更好的退后一步,并解释你在这里试图完成,因为我真的不知道你是什么原因你申请请求超时选项。在大多数情况下,我不会推荐这个选项。

另外keepAlive选项在这里没有影响,因为它没有被应用到tcp传输,所以它只是被忽略。除了那个tcp套接字保持活着实际上是没有用的,因为它每两个小时左右踢一次,tcp传输将为你做他们自己的听觉,除非你禁用不活动监视器,所以他们不需要keepAlive = true。

如果您可以提供一些关于您看到的例外情况的更多信息,或者在请求超时时尝试解决什么问题,我可以更好地回答您的问题。

-Tim www.fusesource.com

+0

感谢您的回应Tim。 – rvxnet 2011-04-11 11:55:17

+0

我正在使用最新版本的NMS-v1.5.0。本质上,我试图对付的问题是代理中的故障,导致我的应用程序(使用同步发送)中的问题 – rvxnet 2011-04-11 12:28:42

+0

仍然不清楚请求超时应该为您解决什么问题,仅使用故障转移传输就会检测断开连接并重新连接到您的新代理。您可以配置故障转移传输上的重新连接尝试限制和延迟值,以防万一您不希望客户端挂在连接上。如果没有代理正在运行,则使用Start()方法。 – 2011-04-11 18:41:10