2017-05-25 81 views
0

我正在使用JBoss Fuse,如果我有多個路由或單個路由,我很困惑。假設我們有兩個條件,我們將根據條件執行不同的操作。例如什麼是設計路線的最佳途徑?有多條路線是否好?

<camelContext> 
<route> 
<choice> 
<onWhen> 
<simple>${property.name} == 'foo'</simple> 
....do something 
</onWhen> 
<onWhen> 
<simple>${property.name} == 'bar'</simple> 
...do something 
</onWhen> 
</route> 
</camelContext> 

回答

1

對於這類問題沒有一個有效的答案,因爲它在很大程度上取決於您的應用程序。一般來說,擁有較小的路線可以很容易地測試您的應用程序和重用邏輯。

您可以重構這樣

<camelContext> 
    <route> 
     <!-- route starts somehow --> 
     <choice> 
      <onWhen> 
       <simple>${property.name} == 'foo'</simple> 
       <to uri="direct:handleFoo" /> 
      </onWhen> 
      <onWhen> 
       <simple>${property.name} == 'bar'</simple> 
       <to uri="direct:handleBar" /> 
      </onWhen> 
     </choice> 
    </route> 

    <route id="ThisRouteWillHandleFooCase"> 
     <from uri="direct:handleFoo" /> 
     <to uri="..." /> 
     <!-- do stuff for foo here --> 
    </route> 

    <route id="ThisOtherRouteIsForBarCase"> 
     <from uri="direct:handleBar" /> 
     <to uri="..." /> 
     <!-- do stuff for bar here" --> 
    </route> 

</camelContext> 

direct:組件使得它像調用Java方法您的路線,這是其他途徑直接和同步調用。現在您可以輕鬆測試foo的行爲以及bar的行爲。

現在想象一下,您需要更新數據庫或經常進行Web服務調用:最好有一個單獨的路由來完成這個工作並多次調用它。

+0

非常感謝您的回答非常明確,但我想知道直接使用是否有效?它如何在後臺工作?我想讓我的代碼容易進行單元測試,但我不直接使用,因爲我不知道它的工作原理 –