Hi

See this FAQ how to stop a route from a route
http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

On Mon, Mar 18, 2013 at 3:21 PM, mdo <[email protected]> wrote:
> Hello,
>
> I'm trying to stop a route from a processor. The route is Quartz-triggered
> (via context.startRoute()). The route in question is defined like this:
>
>         from("file:///tmp/x/?sendEmptyMessageWhenIdle=true")
>                 .noAutoStartup()
>                 .routeId(nameConsumer)
>                 .choice()
>                     .when(body().isNull()).log("stopping route")
>                         .process(
>                             new Processor() {
>                                 @Override
>                                 public void process(final Exchange exchange)
> throws Exception {
>
> getContext().getInflightRepository().remove(exchange);
>                                     // try to stop the consumer, the polling
> field of the ScheduledBatchPollingConsumer must be false? This doesn't work:
>
> getContext().getRoute(exchange.getFromRouteId()).getConsumer().stop();
>                                     // Remove the route entry from the
> inflight repo -- this brings the pending size down by 1:
>                                     getContext().getInflightRepository()
>
> .removeRoute(exchange.getFromRouteId());
>
> getContext().stopRoute(exchange.getFromRouteId());
>                                 }
>                             }
>                         )
>                     .otherwise().to("seda:" + nameSeda +
> "?waitForTaskToComplete=Never");
>
>
> The idea was to use empty messages to signal when there are no more files to
> process (sendEmptyMessageWhenIdle).
>
> Problem is if I only remove(exchange) and
> stopRoute(exchange.getFromRouteId()) Camel complains that there are 2
> remaining pending exchanges:
>
> [Camel (camel-1) thread #3 - ShutdownTask] INFO
> org.apache.camel.impl.DefaultShutdownStrategy - Waiting as there are still 2
> inflight and pending exchanges to complete, timeout in 299 seconds.
>
> Removing the route entry from the inflight repository brings this number
> down by 1. But the other "pending exchange" seems to be there due to the
> fact that getPendingExchangesSize in ScheduledBatchPollingConsumer returns 1
> all the time if its state is "polling", a comment reads:
>
>             // force at least one pending exchange if we are polling as
> there is a little gap
>             // in the processBatch method and until an exchange gets
> enlisted as in-flight
>             // which happens later, so we need to signal back to the
> shutdown strategy that
>             // there is a pending exchange. When we are no longer polling,
> then we will return 0
>
>
> I've tested with Camel 2.10/2.11.
>
> Any hints? Thanks in advance.
> mdo
>
>
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/stopRoute-Waiting-as-there-are-still-X-inflight-and-pending-exchanges-to-complete-tp5729348.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to