簡體   English   中英

駱駝消耗一條消息並停止,交易

[英]Camel consume single message and stop, transacted

我正在嘗試使用Camel以事務方式使用來自JMS隊列的單個消息。 特別是在這樣的流程中:

  1. 等待消息發布到JMS隊列上
  2. 嘗試使用和處理單個消息
  3. 如果處理失敗(發生異常),請回滾消耗
  4. 如果處理通過,請確認並停止使用其他消息
  5. 在應用程序生命周期的后期,另一個進程觸發消耗,從(1)重新開始

最初,我嘗試通過使用ConsumerTemplate的輪詢使用者來執行此操作,但是我不知道是否可以通過事務方式執行此操作-事務似乎是ConsumerTemplate的內部事務,因此無論我做什么消息都是ConsumerTemplate返回時已確認為已消耗。

我可以使用ConsumerTemplate做到這一點嗎? 我可以使用Camel做到這一點嗎?如果可以,最好的方法是什么(簡單的示例將不勝感激)?

我最終使用pollEnrich dsl實現了這一目標。 例如,我的路線構建器如下所示:

from("direct:service-endpont").transacted("PROPOGATION_REQUIRED").setExchangePattern(ExchangePattern.InOut).pollEnrich("activemq:test-queue").bean(myHandler);

我將直接端點用作服務,向直接端點發送“請求”消息會輪詢jms隊列以查找單個消息(如果需要,則進行阻塞)。 啟動的事務擴展到pollEnrich,因此,例如,如果myHandler bean失敗,則pollEnrich期間獲取的消息將不被使用並留在隊列中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM