2011-04-10 85 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