2017-04-18 78 views
0

嗨,我是駱駝新手,並有與JMS隊列相關的設計問題。駱駝JMS隊列輪詢和數據恢復

我正在接收一組數據。這些數據有一個參考日期。這些數據每15分鐘通過一次批處理髮送。

我必須處理收到的數據並將它們轉發到另一條路由。

如果給定的數據無法處理,我需要重新處理它。我必須確保在處理下一個數據集之前處理它。

所以我正在考慮創建一個JMS路由來處理之前接收這些數據。然後處理它。然後將其發送到另一個隊列。

FTP - >處理數據行(A) - > JMS隊列 - >處理器(B) - >直接:呼叫

如果處理器B失敗我希望數據之前下一個被處理數據集由FTP發送。 (因爲第二個數據集可能包含第一個數據集數據的更新)

所以我在考慮使用一個隊列,以確保它們總是按照它們接收的順序進行處理。

但是我對於沒有Camel的JMS的經驗是,一旦從隊列中消耗了對象,它就不再處於隊列中。 駱駝也是這樣嗎? 在這種情況下,我必須重試來處理數據,或將它們放回隊列中?

這個「恢復」部分我不清楚,我想了解支持這一點的模式。

非常感謝您的幫助

吉爾斯

回答

0

這部分「一旦對象從隊列它不是在隊列中了消費。」並不完全正確。實際上,當您訂閱隊列並收到消息時,您需要處理它並將確認發送回JMS代理。如果確認成功,則消息將從隊列中刪除。但是,如果確認不成功,或者如果您的流程將會死亡,並且與代理的連接將中斷,那麼消息將不會從隊列中移除,並會傳遞給其他使用者。

通常,當消費者收到消息時發送確認消息時,大多數JMS庫都在使用模式,但您始終可以更改此模式並在處理部分成功完成時手動發送確認。

什麼駱駝JMS(http://camel.apache.org/jms.html),可以使用端點選項「acknowledgementModeName」,它具有像一些不同的可能值:

  • AUTO_ACKNOWLEDGE(默認) - 確認將被送到正確的對應後「從」你的路由
  • CLIENT_ACKNOWLEDGE - 允許應用程序控制何時發送確認,以及在交換處理期間是否沒有異常將被拋出,然後消息將被確認並從隊列中移除。