179.17. 启用 Transacted Consumption
常见的要求是从事务中的队列消耗,然后使用 Camel 路由处理消息。要做到这一点,只确保您在组件/端点上设置以下属性:
-
transacted
= true -
transactionManager
= Transsaction Manager - 通常JmsTransactionManager
详情请查看 Transactional Client EIP 模式。
事务和 [Request Reply] over JMS
使用 Request Reply over JMS 时,无法使用单个事务;JMS 不会在执行提交前发送任何消息,因此服务器端不会接收任何消息,直到事务提交为止。因此,要使用 Request Reply,您必须在发送请求后提交事务,然后使用单独的事务来接收响应。
要解决这个问题,JMS 组件使用不同的属性来指定事务用于单向消息传递和请求回复消息传递:
transacted
属性只适用于 InOnly message Exchange Pattern (MEP)。
transactedInOut
属性应用到 InOut (Request Reply)消息交换模式(MEP)。
如果要将事务用于 Request Reply(InOut MEP),您必须设置 transactedInOut=true
。
从 Camel 2.10 开始提供
您可以使用组件/端点中的以下属性来利用 DMLC 转换会话 API :
-
transacted
= true -
lazyCreateTransactionManager
= false
这样做的好处是,在使用没有配置的 TransactionManager 的情况下,cacheLevel 设置将会被遵守。配置 TransactionManager 时,在 DMLC 级别不会发生缓存,需要依赖池的连接工厂。有关此类设置的详情,请查看 此处 和 此处。