限制Apache Camel中的事务范围

时间:2017-12-06 10:16:29

标签: scope transactions apache-camel

我有一个带有多个处理器的事务处理的Camel路径

from(Constant.RouteA)
   .transacted()
   .process(processor1)
   .process(processor2)
   .process(processor3)
   .wireTap(Constant.RouteB)
   .wireTap(Constant.RouteC)
   .end()

我的问题是我不希望路由的最后部分(窃听)成为事务的一部分,即我希望在处理器3完成并提交事务后执行它们。

最初我看过使用onCompletion()但它似乎不能与transacted()一起使用。

所以我找到了另一种方法,需要使用policy()来限制交易范围,即

from(Constant.RouteA)
   .policy("PROPAGATION_REQUIRED")
      .process(processor1)
      .process(processor2)
      .process(processor3)
   .end()
   .wireTap(Constant.RouteB)
   .wireTap(Constant.RouteC)
   .end()

问题是这个解决方案需要在Spring配置中定义SpringTransactionPolicy,但我正在使用的软件不使用Spring。事务由Bitronix管理,一切都可以使用transacted()方法,据我所知,这不允许你限制事务的范围。

有没有一种简单的方法来实现我的目标?希望没有将春天带入画面。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试创建两条路线。例如:

from(direct:startRoute)
      .to(Constant.RouteA)
      .wireTap(Constant.RouteB)
      .wireTap(Constant.RouteC);

from(Constant.RouteA)
      .transacted()
      .process(processor1)
      .process(processor2)
      .process(processor3);

路径“Constant.RouteA”完成后,所有更改都将提交。