I have a route setup that looks like this:
<route id="requestor">
  <from uri="bean:generateRequest"/>
  <to uri="jms:topic:request_topic"/>
  <to uri="stream:out"/>
  <to uri="bean:shutdownRequestor"/>
</route>

It's purpose is to run once at startup to get an intial value (in this
example I just have sending to out instead of doing anything with the reply)
and never run again.

The shutdownRequestor bean has a handler that looks like this:
public void process() {
  List<RouteDefinition> routes = camelContext.getRouteDefinitions();
  for(RouteDefinition tRoute: routes) {
    if (tRoute.getId().equals(routeToShutdown)) {
      try {
        camelContext.stopRoute(tRoute);
      } catch (Exception e) {}
    }
  }
}

routeToShutdown and camelContext are injected prior to it running.

This worked fine in 2.4.0.  
In 2.5.0, I send the request and receive the reply as expected, but when
calling the shutdownRequestor bean the callback.done(false) call in
ReplyManagerSupport.processReply hangs until the timeout is hit on the
correlation map.  Once the timeout is hit onTimeout in the reply handler
gets called and it goes back to processReply and removes the id from the
correlation map.  Then as expected camel tries to redeliver the exchange and
it spins complaining the correlation id isn't in the correlation map.
If I remove the shutdownRequestor bean from the route then as expected it
happily continues requesting/receiving responses forever.

Perhaps the whole way I was going about implementing a "run once" route is
wrong to begin with.  Is there a suitable way to do this that will work with
the new 2.5.0 async request/reply?  

-- 
View this message in context: 
http://camel.465427.n5.nabble.com/issue-stopping-a-jms-request-reply-route-after-upgrading-to-2-5-0-tp3300620p3300620.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to