2012-12-20 68 views
1

我已經建立了帶有weblogic服務器12c的統一分佈式隊列。我正在嘗試使用jms分佈式隊列來實現交付和高可用性。在我的prototpe測試部署中,我在集羣中有兩臺託管服務器,讓我們說managed_server1和managed_server2。這個託管服務器中的每個託管jms服務器,即jms server1和jms server2。我已經使用jdbc持久性存儲配置了jms服務器。我已啓用服務器關聯。jms高可用性消息傳遞順序

  1. 我有一個生產者運行如java queuproducer t3 ::/managed_server1。我發出4條消息。從weblogic監控控制檯,我看到queu中有4條消息,因爲沒有使用者到隊列中。
  2. 現在我關閉managed_server1。
  3. 調出一個消費者來監聽java queuconsumer t3:// managed_server2。此消費者不能消費消息,因爲生產者將所有消息發送到jms server1,並且它已關閉。
  4. 啓動託管服務器1,啓動消費者以聽取t3:// managed_server1我可以獲取所有消息。

這是我的問題,如果managed_server1發生故障,那麼它從來沒有恢復過來,我是否會丟失我的所有消息。此外,如果有另一位製片人將消息發送到Java queuproducer T3:// managed_server2然後根據這些生產者之間的時間信息的順序不guanranteed。

我有點迷路,我是否錯過了一些東西。單位能否幫助我克服這一點。或者我應該使用分佈式主題,而不是分佈式隊列,所有的JMS服務器將接收所有來自生產商的消息,但如果在我的consumre監聽一個JMS服務器故障有我的應用程序只有一個消費者,當我切換到其他jms服務器,我可能會開始從一開始就從我離開的地方得到消息。

任何關於相同的建議將有所幫助。

+0

您能否確認您使用的是單個JMS連接工廠? –

+0

是的,它使用一個jms連接工廠。 – balaji

回答

2

好問題!

「這是我的問題說,如果managed_server1下去那麼它永遠不會回來了,做我失去我的所有消息。」

答案 - 不,你不鬆動的所有郵件,它們存儲在配置部署管理服務器1.如果你想發送給managed_server1消息的JMS服務器的JDBC存儲從managed_server2需要配置JMS遷移消耗。 「

」另外,如果有另一個生產者發送消息給java queuproducer t3:// managed_server2,那麼基於這些生產者之間的時間消息的順序是不能保證的,命令單元可以幫助我克服這個問題。

答案 - 如果你想將郵件按照一定的順序嚴格被消耗掉,那麼你將不得不使用單位的順序(UOO)。當消息使用UOO發送,它們被送到幾個UDQ的旅遊目的地之一,如果中途該目標失敗,遷移啓用被遷移到下一個目的地UDQ和新UDQ消息消息也傳遞到新的目的地。

相關鏈接 -

http://www.youtube.com/watch?v=B9J7q5NbXag http://www.youtube.com/watch?v=_W3EJ8p35lI

希望這有助於。

+0

SridharS非常感謝您的回覆,這是我真正想要的。將嘗試自動服務遷移與UOO實施我應該很好。 – balaji

+0

這實際上是在啓用UOO和JMS遷移時WLS的工作原理。但請注意,遷移時間並不顯着,並且在UOO隊列中有數千條消息時,遷移時間可能爲「分鐘」。此外,其他WLS資源不一定與遷移協調。因此,消息使用者可能會嘗試在遷移之前從遷移隊列讀取數據,導致JMS連接/隊列會話錯誤(重複),直到遷移完成。 –