骆驼DSL中的transacted()如何与JMSComponent的transacted =“ true”相关。 如果将骆驼DSL中的JMSComponent的事务属性与transacted()一起设置为“ true”,那会有意义吗?
答案 0 :(得分:2)
Style
使您的JMS使用者交易。因此,如果您要确保您不会丢失消息,则需要这样做。
但是,您有多个启用交易的选项(请参见Camel docs for details)。
仅当您选择第二个选项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,或者在与涉及的每个系统一起使用简单事务处理时,必须实现补偿逻辑来处理边缘情况。