2011-05-29 72 views
5

我正在爲基於駱駝的小型進程引擎開發PoC。要求是有能力執行一組結果步驟,並且每個步驟可能需要數小時才能執行。異步通信風格在這種情況下是顯而易見的選擇,但我爲獲得「流程」權利而苦惱。用駱駝處理長壽命進程的方法

當發送消息到外部系統時,我需要等待完成。只要可能需要很多時間,我會在發送消息後停止具體步驟的處理,然後在收到完成消息後再開始新的「作業」。因此,每個步驟的字面處理都將作爲從同一個JMS隊列開始的Camel路由處理,然後基於內容的路由器將根據消息頭或其內容決定應執行哪個具體邏輯。

但是,問題在於如何避免消息丟失的可能性。例如,在具體的一步我發送消息並停止處理。由於某種原因,外部系統沒有處理消息,因此我的系統沒有收到任何通知。這意味着進程被卡住,除非其他組件會產生消息來喚醒它。只要系統可以在任何時間點關閉,我必須構建邏輯以在重新啓動後繼續處理消息(這意味着某種類型的消息持久性,重新傳送和事務管理策略)。

所有這些問題加起來,因此我想問問經驗駱駝冠軍提供有關如何使用駱駝設計這種邏輯的建議。我知道專用的BPM產品或ESB可能更容易處理這個問題,但我不想膨脹該解決方案。

歡迎任何意見,特別是駱駝能力,可以幫助簡化解決方案。

回答

2

駱駝的BAM支持應該爲您提供一些長期的過程支持(超時,錯誤處理場景等)。此外,JMStransactions將有助於可靠/持久性消息傳遞的要求,等等。

好運氣,讓我們知道,如果你的土地上的另一種方法...

2

我建議索賠格紋圖案是最適合在長時間運行的外部調用之間保持狀態。在發送出站消息之前檢入您的進程狀態。

處理檢測來自外部進程的未答覆的一種方法是發佈兩條消息。一條消息進入外部進程,另一條進入內部隊列。我會打電話給第二個過程超時信息。這是一個非常小的消息,只有相關ID和適當的到期時間。如果從外部進程接收到進程,則接收進程將具有相關標識並能夠從進程超時隊列中刪除該消息。如果外部進程沒有回覆,則進程超時隊列的死信隊列應連接到駱駝路由上,以提醒管理員或採取適當的自動操作,例如,檢索索賠檢查等。這應該允許具有最小開銷和沒有BPM工具的持久狀態,因此沒有單點故障。