我的路线有“到”子句。如果发生一些异常,我已经使用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()的确切用法。
答案 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