我正在尝试使用Camel以事务方式从JMS队列中使用单个消息。特别是在这样的流程中:
起初我尝试使用使用ConsumerTemplate的轮询使用者来做这件事,但是我无法弄清楚它是否有可能以事务方式执行此操作 - 看起来事务是ConsumerTemplate内部的,所以无论我做什么在ConsumerTemplate返回时,消息已被确认为已消耗。
我可以使用ConsumerTemplate吗?我可以使用Camel执行此操作吗?如果是,那么最佳方法是什么(简单示例将被赞赏)?
答案 0 :(得分:0)
我最终使用pollEnrich dsl来实现这一目标。例如,我的路线构建器看起来像:
from("direct:service-endpont").transacted("PROPOGATION_REQUIRED").setExchangePattern(ExchangePattern.InOut).pollEnrich("activemq:test-queue").bean(myHandler);
我使用直接端点作为服务,向直接端点发送“请求”消息,轮询jms队列以获取单个消息(如果需要,则阻塞)。事务开始扩展到pollEnrich,因此,例如,如果myHandler bean失败,则pollEnrich期间获取的消息不会被消耗并留在队列中。