Apache Camel:路由中的多个事务
问题描述:
我需要在路由中创建多个事务作用域。像下面的东西。Apache Camel:路由中的多个事务
<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年9月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来控制交易,并且可以创建多个交易范围。
这是目前允许的吗?
答
的确,您每条路线只能有一个交易策略,但您也可以将需要不同策略的路线部分分隔到另一条路线(有关更多详细信息,请参阅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>