gpt4 book ai didi

java - Camel 消耗单个消息并停止,进行事务处理

转载 作者:行者123 更新时间:2023-11-30 08:12:04 25 4
gpt4 key购买 nike

我正在尝试使用 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 期间获取的消息不会被消耗并保留在队列中。

关于java - Camel 消耗单个消息并停止,进行事务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com