2016-09-14 144 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>