2017-09-29 83 views
0

我們使用Tibco EMS作爲我們的消息系統,並使用apache camel來編寫我們的應用程序。在我們的應用程序中,消息被寫入隊列。一個組件,concurrentConsumers設置爲8,從隊列中讀取,處理消息,然後寫入另一個隊列。另一個組件,concurrentConsumers再次設置爲8,然後從這個新的隊列中讀取,等等。到目前爲止,維護消息順序並不重要,但新的要求意味着它現在是。查看駱駝文檔,建議使用jmsxgroupid來維護排序。不幸的是,Tibco EMS沒有這個功能。在多線程應用程序中,有沒有其他方法可以保持駱駝的排序?我看過粘性負載平衡,但這似乎只適用於端點負載平衡。在多線程apache駱駝應用程序中維護排序

感謝

布魯斯

+0

併發執行不能確保順序...特別是當任務需要不同的時間執行... EG網絡操作,如發送消息... –

+0

檢查在這個鏈接http:// camel的resequencer EIP。 apache.org/resequencer.html – Namphibian

+0

爲什麼jmsxgroupid不適用於TIBCO EMS?它是從一開始就支持的JMS規範的一部分(查看文檔) – Seb

回答

3

於一體的企業世界中,我們一般採用Resequencer設計模式來解決這樣那樣的,你需要確保在消息排序問題。

Apache Camel涵蓋了廣泛的企業集成模式,其中包括Resequencer的核心,它對這些模式具有開箱即用的印象。所以你正在尋找應該是這樣的:
http://camel.apache.org/resequencer.html

在特定情況下,所有你需要做的是添加自定義消息頭像myMessageNo,其中有一個順序號,指定排序,到傳出消息到TIBCO EMS。然後,在消費者方面,使用重排序器EIP來恢復來自TIBCO EMS的傳入消息的排序。但是,正如你所看到的那樣,它不像將電子排序器EIP放到你的駱駝路線那麼簡單。 (任何異步解決方案總是難以正確構建。)對於再編程器,您需要考慮何時發生悲傷路徑,例如,當一些消息丟失,永遠達不到。爲確保您的路線即使在這些特殊情況下也能正常工作,您需要從兩個選項中進行選擇:最大批量或超時。根據所選條件,重新排序器將在批量達到最大大小時刷新消息,或超時等待丟失消息。