从Apache Camel中的当前路由返回并继续路由

时间:2016-01-05 17:23:52

标签: apache-camel

假设我们有2条路线 A B 路线在某个时刻称为路线 B 。我希望在 B 路线的某些条件下返回 A 并继续 A 路由,所以在我的情况下,stop()不合适。我想保持我的路线没有严重的重构

3 个答案:

答案 0 :(得分:3)

您可以使用窃听器实现此目的。在这种情况下,您的逻辑必须改变:

  • 路线B分为B-common和B-cont,其中B-cont包含在将结果返回给A后必须处理的逻辑
  • 逻辑必须从“在特定条件下返回A并继续处理B”更改为“在倒置的特定条件下连接到B-cont”

有关窃听的详情,请访问: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")

调用路线A的所需部分