如果上一个处理器失败,则跳过Camel处理器

d7v8vwbk  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(145)

我有一个 Camel 路由,它经过一系列处理器,每个处理器调用一些服务。如果处理器1正常失败,我不再想调用处理器2-5,但我想调用consolidateResponse。对于所有其他处理器也是如此。有没有一个最佳实践方法可以实现这一点,而不会在失败时抛出异常?

<camel:routeContext id="myRouteRouteContext">
    <camel:route id="my-route-route">

        <camel:from uri="{{camel.uri.myRoute}}" />
        <camel:process ref="{{bean.processor.processor1}}" />
        <camel:process ref="{{bean.processor.processor21}}" />
        <camel:process ref="{{bean.processor.processor3}}" />
        <camel:process ref="{{bean.processor.processor4}}" />
        <camel:process ref="{{bean.processor.processor5}}" />
        <!--  Stringfy response object into a JSon text response -->
        <camel:process ref="{{bean.processor.consolidateResponse}}" />

        <!-- All catch exception handler -->
        <camel:onException>
        <camel:exception>java.lang.Exception</camel:exception>
        <camel:handled>
            <camel:constant>true</camel:constant>
        </camel:handled>
        <camel:to uri="{{camel.uri.error}}" />
        </camel:onException>

    </camel:route>
</camel:routeContext>
11dmarpk

11dmarpk1#

我认为试抓是最好的解决方案也是常见的编程解决方案也 Camel 也有停
https://camel.apache.org/manual/try-catch-finally.html

from("direct:start")
    .choice()
        .when(body().contains("Hello")).to("mock:hello")
        .when(body().contains("Bye")).to("mock:bye").stop()
        .otherwise().to("mock:other")
    .end()
.to("mock:result");

相关问题