2011-05-06 61 views
0

我想找到如何在用戶失敗的情況下通知EMS發佈者的答案。 在發行商 - > EMS服務器 - >訂購者的情況下,如果訂閱者失敗,我需要通知發佈者採取糾正措施。我並不關心易用性/實用性,我的意義在於時間。在交易系統中,如果我向發送給交易所的訂閱者發送市場訂單,如果發送失敗,我需要讓我的發佈者將消息發佈到另一個不同的主題上(另一個交易所)。 任何想法表示讚賞。如果用戶登錄失敗,TIBCO EMS通知發佈者

回答

1

不確定您是否有權訪問QueueInfo或TopicInfo中的ReceiverCount或ConsumerCount,我相信您需要tibjms.admin包。可能你可以在發佈之前查詢這個,然後有選擇地發佈?不知道什麼是開銷。

由於JMS的性質,AFAIK沒有交易狀態(除非您使用XA交易 - 所有開銷)或確認將通過EMS代理傳播。 I.e.acks始終位於發行商和經紀商,消費者和經紀商之間。

如果不符合上述要求,您可以嘗試一個單獨的ack主題,但角色被顛倒過來,但失敗案例是超時 - 我不確定這是否合理。

如果你並不在乎交易的順序是什麼 - 爲什麼不讓主題/隊列排他性並讓兩個消費者嘗試消費 - 第一個成功的人將處理所有的消息 - 如果它死了,然後第二個(可能會週期性地重試 - 可能成功連接)..或者允許兩個處理訂單的隊列 - 記住一條消息將只能由一個消費者處理...

我真的不能看到在訂單流中分離的消息傳遞總線的優勢對我來說毫無意義..

+0

感謝您的回答。我將不得不與我的團隊討論這些想法。 – 2011-05-08 15:44:12

3

tibjmsadmin.jar庫包含用於檢測訂戶斷開連接的方法。比寫代碼更容易,您可以:

  • 如果你有鷹,使用 tibjmsadmin.hma寫鷹規則 事件訂戶 斷開,或
  • 聽監視器 話題 $ sys.monitor.connection.disconnect - 消息的正文告訴你 哪個用戶斷開連接。

然而,這些「監控」辦法對故障轉移出版商有顯著的問題 - 在它需要你來檢測用戶的故障和重定向發佈的時候,一些消息可能會得到通過,並陷入了倒閉隊列。你不會看到這發生在任何1000萬美元的交易!

EMS知道用戶連接與否,你應該利用這一點。

使用「分佈式隊列」,應用程序無需將邏輯編碼到應用程序中,以便在發生故障時切換到新用戶。發生這種情況時不會丟失消息並保持消息的順序。在您的代碼和JMS提供程序的管理設置中保留負載平衡和故障轉移邏輯也是很好的架構實踐。

基本上你設置了多個用戶到一個隊列(每個用戶代表的交換)。默認操作將使EMS以循環方式在訂戶中對消息進行負載均衡。但是,您可以將隊列設置爲「獨佔」,以便一次只能向一個用戶發送消息。然後,如果該活動用戶失敗,則將該消息轉發給另一個用戶。

有關所有這些主題的更多詳細信息,請參閱EMS手冊。

+0

感謝您的答案。我一定會檢查文檔。 – 2011-05-08 15:47:49