Have you tried externalizing the onCompletion(), such as putting this as a separate statement above your route and below the onException()
onCompletion() .log("parallel processing is done") .setBody(constant(null)).to("direct:c"); Mary Mary Cochran Red Hat Consulting mcoch...@redhat.com (419) 543-0531 On Wed, Oct 11, 2017 at 3:27 PM, LiQiang Ye <liqiang.w...@gmail.com> wrote: > Claus, I found that the route that main route that contains multicast will > stop routing after "direct:a" hits exception handler. So I want to know how > I can make the route continue routing even if "direct:a" hits exception and > does its retries and stops. > > from("timer:reload-config?delay=" + reloadInterval + > "&fixedRate=true&period=" + reloadInterval) > .multicast().parallelProcessing() > .to("direct:a", "direct:b") > .end() > .log("route is done") // Note: it will never hit the log if "direct:a" > hits the exception handler. > > > > > On Tue, Oct 10, 2017 at 2:51 PM, LiQiang Ye <liqiang.w...@gmail.com> > wrote: > > > Hi camel friends > > > > I have routes designed as below. I wonder how I can make onCompletion() > > block to execute route "c" even though route "a" or route "b" has > exception > > occurs. Currently when a processing route "a" or "b" encounters exception > > and retries, the route will stop routing further and onCompletion block > > never gets executed. > > > > > > from("timer:reload-config?delay=" + reloadInterval + > > "&fixedRate=true&period=" + reloadInterval) > > .multicast().parallelProcessing() > > .to("direct:a", "direct:b") > > .end() > > .onCompletion() > > .log("parallel processing is done").setBody(constant(null)) > .to("direct:c") > > > > ------ > > > > from("direct:a") > > .onException(Exception.class) > > .maximumRedeliveries(3) > > .redeliveryDelay(1000) > > .backOffMultiplier(2) > > .retryAttemptedLogLevel(LoggingLevel.WARN) > > .handled(true) > > .end() > > .to("bean:aBean?method=setData") > > > > Thanks > > >