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
>  
>  

Reply via email to