178.17. 启用 Transacted Consumption

常见的要求是使用事务中的队列,然后使用 Camel 路由处理消息。要做到这一点,请确定在 component/endpoint 上设置以下属性:

  • transacted = true
  • transactionManager = Transsaction Manager - 通常 JmsTransactionManager

详情请查看 Transactional Client EIP 模式。

JMS 的事务和 [Request Reply]

当对 JMS 使用 Request Reply over JMS 时,您不能使用一个事务;JMS 不会在执行提交前发送任何消息,因此服务器侧不会在所有事务提交之前接收任何内容。因此,若要使用 Request Reply,您必须在发送请求后提交事务,然后使用单独的事务来接收响应。

要解决这个问题,JMS 组件使用不同的属性来指定事务用于单向消息传递和请求回复消息传递:

transacted 属性 仅适用于 In Only message Exchange Pattern (MEP)。

transactedInOut 属性应用到 InOut (Request Reply)消息交换模式(MEP)。

如果您想将事务用于 请求(InOut MEP),您必须设置 transactedInOut=true

可从 Camel 2.10 开始

您可以使用 component/endpoint 上的以下属性利用 DMLC transact 的会话 API

  • transacted = true
  • lazyCreateTransactionManager = false

这样做的好处是,在使用本地事务时,将遵循 cacheLevel 设置,而无需配置事务管理器。当配置了 TransactionManager 时,在 DMLC 级别不会发生缓存,因此需要依赖于池的连接工厂。有关此类型设置的详情,请查看 此处此处