Apache Camel:路由中的多个事务

时间:2016-09-14 13:58:49

标签: transactions apache-camel

我需要在Route中创建多个事务范围。像下面的东西。

<route>
  <from uri="activemq:queue:foo"/>
  <transacted ref="required"/>
  <to uri="activemq:queue:bar"/>
  <to uri="bean:database1?method=insert(*,*)"/>
  <transacted ref="requiresNew"/>
  <to uri="bean:database2?method=insert(*,*)"/>
</route>

如果我创建上述路线,我会收到以下错误。

  

ERROR 2016-09-13 14:32:32 servlet.FrameworkServlet - 上下文初始化失败   org.apache.camel.RuntimeCamelException:java.lang.IllegalArgumentException:必须将输出添加为路由的顶级。尝试将Transacted [ref:requiresNew]移动到路径顶部。                   在org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642)

查看文档和论坛,看起来路径中只允许一个事务范围。我正在寻找可以从Route控制事务的解决方案,并且可以创建多个事务范围。

目前是否允许?

1 个答案:

答案 0 :(得分:3)

确实,每条路线只能有一个交易政策,但您也可以将需要不同政策的路线部分分成另一条路线(有关详细信息,请查看the official documentation),例如

<route>
  <from uri="activemq:queue:foo"/>
  <transacted ref="required"/>
  <to uri="activemq:queue:bar"/>
  <to uri="bean:database1?method=insert(*,*)"/>
  <to uri="direct:requiresNew"/>
</route>

<route>
  <from uri="direct:requiresNew"/>
  <transacted ref="requiresNew"/>
  <to uri="bean:database2?method=insert(*,*)"/>
</route>