我有一个带有多个处理器的事务处理的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()方法,据我所知,这不允许你限制事务的范围。
有没有一种简单的方法来实现我的目标?希望没有将春天带入画面。谢谢!
答案 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”完成后,所有更改都将提交。