It’s not a good idea to send the multiple requests through a single channel, as it could confuse the async handler when it receive the response.
-- Willem Jiang Red Hat, Inc. Web: http://www.redhat.com Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem On January 31, 2015 at 7:12:34 AM, Elvio Caruana (ecaruana) (ecaru...@cisco.com) wrote: > Hi, > > I think I may have run into a potential issue with camel-ahc. I've narrowed > it down to a > very specific scenario - a combination of re-using the same ahc component in > combination > with using split().parallelProcessing() EIP. Tested with camel 2.14.1 and > 2.14.0. > > I'll try and demonstrate in a simple route: > > List list = Arrays.asList("alice", "bob", "charles", "david", "edward"); > > from("timer://foo?repeatCount=1") > .setBody(constant("someMainRouteContent")) > .to("direct:fetch") // [1] > .setBody(constant(list)) > .split(body()).parallelProcessing() // [2] > .log("processing ${body}") > .to("direct:fetch") // [3] > .end() > .log("and back to main processing") > .end(); > > from("direct:fetch") > .log("making http request for ${body}") > .to("ahc:http://localhost:8765/rest/test") > .log("returned from http request for ${body}") > .end(); > > Note: > > 1. The routes share the same AHC component [1, 3] (i.e. common set of ahc > worker threads). > > 2. The ahc worker thread will continue processing synchronously between [1] > and [2],until > the point the split() parallel thread pool takes over. On an http response, > the ahc worker > thread will continue processing synchronouslyas expected. > > 3. The above will result in a timeout exception for one of the split > exchanges (irrespective > of the size of the list), and the route never completes. > java.util.concurrent.TimeoutException: Request timeout of 60000 ms > at > com.ning.http.client.providers.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43) > > at > com.ning.http.client.providers.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:41) > > at > org.jboss.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:556) > > at > org.jboss.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:632) > at > org.jboss.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:369) > at > org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) > > at java.lang.Thread.run(Thread.java:722) > > Trace of the above route is attached. > > Having two separate ahc endpoints (i.e. with separate thread pools), or > without parallel > processing in the split EIP, then the above works fine. > Any thoughts? > > > Kind Regards, > Elvio > >