使用try catch时,Apache Camel路由结束

时间:2013-12-05 07:50:43

标签: apache-camel

我的路线有“到”子句。如果发生一些异常,我已经使用try catch块将交换重定向到路由。我遇到的例外情况与客户端允许的最大并行连接数无关。似乎,当异常得到解决时,交换的每次重试都会在离开的地方进一步处理。我怎样才能结束有例外的路线。

以下是我的代码。

from("direct:hourlyFeedParts")
    .routeId("appnexus hourly downloader")
    .doTry()
        .process(AppNexusProcessor.getDownloadProcessor())
        .process(AppNexusProcessor.getNamingProcessor())
        .id("Appnexus Feed Downloader")
        .log("Downloading file ${file:name}")
        .to("{{appnexus.partsDestination}}")
        .log("Downloaded file ${file:name} to local")
    .doCatch(Exception.class)
        .to("direct:hourlyFeedParts")
    .end()
    .bean(AppNexusProcessor.class, "updateIdempotentList")
    .choice()
        .when(simple("${property.CamelSplitComplete} == true"))
        .split(beanExpression(AppNexusProcessor.class, "getAggregatorProcessor"))
        .to("direct:S3PreProcessor")
        .endChoice()
    .end();

我想在

之后可能正在使用 endParent()
.doCatch(Exception.class)
.to("direct:hourlyFeedParts")
  .endParent()

这是正确的做法吗?我无法理解文档中 endParent()的确切用法。

2 个答案:

答案 0 :(得分:6)

只需在stop()块的末尾添加doCatch()

.doCatch(Exception.class)
    .to("direct:hourlyFeedParts")
    .stop()
.end()

答案 1 :(得分:0)

为什么不使用重新传递机制,而不是重新注入路线中的交换?

onException(Exception.class)
    .maximumRedeliveries(2).redeliveryDelay(0);

如果您不想重播整条路线或只捕获部分路线上的例外情况,您也可以拆分路线:http://camel.apache.org/how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.html