我正在使用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>
答案 0 :(得分: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服务调用:最好有一条路由来完成这项工作并多次调用它。