骆驼生成器中的JMSComponent> transacted = true和transacted()

时间:2019-01-07 05:45:10

标签: apache-camel spring-camel

骆驼DSL中的transacted()如何与JMSComponent的transacted =“ true”相关。 如果将骆驼DSL中的JMSComponent的事务属性与transacted()一起设置为“ true”,那会有意义吗?

1 个答案:

答案 0 :(得分:2)

JMS组件配置中的

Style使您的JMS使用者交易。因此,如果您要确保您不会丢失消息,则需要这样做。

但是,您有多个启用交易的选项(请参见Camel docs for details)。

  1. 使用本地JMS事务
  2. 使用您自己的Spring交易管理器

仅当您选择第二个选项references a SpringTransactionPolicy(例如transacted="true")时,才需要骆驼DSL transacted()。如果您的路线中存在,则Camel正在寻找要使用的Spring交易管理器。

如果使用选项1(配置比较简单,并且仅与单个JMS代理进行通信就非常适合),则不需要Camel DSL PROPAGATION_REQUIRED,并且JMS使用者路由仍然是事务性的。

由于评论而添加

要使用选项1,只需在骆驼transacted()上设置transacted="true"lazyCreateTransactionManager="false"。不必配置Spring事务管理器(如果这样做,最终将有两个tx管理器!)

如果要在多个JMS代理或一个代理与一个数据库之间进行事务处理,则可能需要XA transactions,或者在与涉及的每个系统一起使用简单事务处理时,必须实现补偿逻辑来处理边缘情况。