2016-09-14 114 views
2

我需要在路由中创建多个事务作用域。像下面的东西。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来控制交易,并且可以创建多个交易范围。

这是目前允许的吗?

回答

2

的确,您每条路线只能有一个交易策略,但您也可以将需要不同策略的路线部分分隔到另一条路线(有关更多详细信息,请参阅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>