骆驼消费单条消息并停止,交易

Camel consume single message and stop, transacted

我正在尝试使用 Camel 以事务处理的方式使用来自 JMS 队列的单个消息。具体在这样的流程中:

  1. 等到消息发布到 JMS 队列上
  2. 尝试消费和处理单个消息
  3. 如果处理失败(异常),回滚消费
  4. 如果处理通过,确认并停止消费更多消息
  5. 在应用程序生命周期的后期,另一个进程触发消费从 (1) 重新开始

起初我尝试使用 ConsumerTemplate 使用轮询消费者来执行此操作,但我无法弄清楚是否可以事务性地执行此操作 - 似乎该事务是 ConsumerTemplate 内部的,所以不管是什么我确实在 ConsumerTemplate returns.

时消息已被确认为已消耗

我可以使用 ConsumerTemplate 执行此操作吗?我可以使用 Camel 执行此操作吗?如果可以,最好的方法是什么(简单的示例将不胜感激)?

我最终使用 pollEnrich dsl 来实现这一点。例如我的路线构建器看起来像:

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

我将直接端点用作服务,向直接端点发送 "request" 消息轮询 jms 队列以获取单个消息(如果需要则阻塞)。事务开始扩展到 pollEnrich,因此如果 myHandler bean 失败,则在 pollEnrich 期间获取的消息不会被消耗并留在队列中。