2013-06-21 68 views
5

做在我的ActiveMQ的客戶端時,我指定要連接到哪個經紀人,有什麼我已經試過指定這是什麼故障運輸與單一URI

tcp://host:port 

failover:(tcp://host:port) 

之間的區別停止並啓動代理,在這兩種情況下,客戶端在重新啓動時都會再次找到代理。我還沒有嘗試使用流中的消息(我正在使用隊列)或其他網絡故障,以確定是否存在差異。

希望有人有一個明確的答案,因爲我發現的文檔有點含糊。

感謝

+0

如果有人很好奇我爲什麼問,我的客戶端在我使用故障轉移URI時會重複EOFExceptions。不幸的是,它只是在特定的環境中做到這一點,我正在努力重現或理解原因,所以我試圖理解移除故障轉移的後果。 EOFExceptions可能是未來的問題! –

回答

2

故障轉移協議還允許您提供一些有用的連接參數。對於前:

failover:(tcp://host:port)?jms.useAsyncSend=true&timeout=5000 

這裏timeout=5000將確保5秒後救助初始連接嘗試,如果代理不可用或不響應。

+0

謝謝。兩個答案都是正確的,所以我選擇了最有用的方法。 –

5

如果您使用故障轉移,則客戶端庫進入重新連接循環,當你失去與服務器的連接。網絡故障將隱藏在您的應用中。如果你沒有使用故障轉移,那麼當你失去連接時,你的應用程序將得到一個JMS錯誤,告訴你你失去了連接。

+0

謝謝。這很有道理。 –

1

故障轉移對於處理代理或系統故障問題非常有用,並提供了耐久性。

故障切換:(TCP://主機1:端口,TCP://主機2:端口,TCP:// host3上:端口)jms.useAsyncSend =真&隨機化=假

這裏?如果你使randomize = true,那麼它將同時使用所有3個經紀人,randomize = false意味着每次使用一個經紀人,當正在運行的經紀人停止時,從休眠經紀人中選擇任何經紀人。 useAsyncSend = true將以異步方式運行消息傳遞系統,與同步相比,消息傳遞系統的速度更快。