camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: camel-ahc issue
Date Mon, 02 Feb 2015 05:36:34 GMT
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) (ecaruana@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
>  
>  


Mime
View raw message