假设我们有2条路线 A 和 B 。 路线在某个时刻称为路线 B 。我希望在 B 路线的某些条件下返回 A 并继续 A 路由,所以在我的情况下,stop()不合适。我想保持我的路线没有严重的重构
答案 0 :(得分:3)
您可以使用窃听器实现此目的。在这种情况下,您的逻辑必须改变:
有关窃听的详情,请访问:http://camel.apache.org/wire-tap.html
配置示例:
<route>
<from uri="direct:A"/>
<log message="B is starting"/>
<to uri="direct:B"/>
<log message="B is finished"/>
</route>
<route>
<from uri="direct:B"/>
<!-- Common B logic here -->
<log message="Common B logic finished"/>
<choice>
<when>
<!-- your condition inverted -->
<wireTap uri="direct:B-cont"/>
</when>
</choice>
<!-- Remaining B logic if needed to prepare required response for A -->
<log message="Response to A prepared"/>
</route>
<route>
<from uri="direct:B-cont"/>
<log message="B processing after returning response to A"/>
<!-- remaining B logic -->
</route>
此类路线的日志输出如下:
B is starting
Common B logic finished
Response to A prepared
B is finished
B processing after returning response to A
或:
B is starting
Common B logic finished
Response to A prepared
B processing after returning response to A
B is finished
或:
B is starting
Common B logic finished
B processing after returning response to A
Response to A prepared
B is finished
正如您所看到的那样,“窃听”路线将并行(大多数情况下)路由到其所在路线的其余部分。详细信息可以在电汇文档http://camel.apache.org/wire-tap.html
中找到答案 1 :(得分:2)
我认为您正在使用直接链接到路线B.您可以简单地在路线B中设置一个标题(当条件满足时)以及当它返回到路线A时,过滤掉那些不在路线A的交换有这个标题集?如果不清楚,请告诉我,我将为您提供一个示例。
R上。
答案 2 :(得分:1)
让您从直接组件连接的多条路线路由 A 。
在路线 B 中,在某些条件下使用to("direct:partRouteA")