Setting http connection pool timeout in Fuse
Issue
- We are currently using Fuse as a proxy with cxf for the inbound endpoints, and camel-http for outbound, We are trying to guarantee a maximum time of the http call, and so far have set the following,
<bean id="http" class="org.apache.camel.component.http.HttpComponent">
<property name="camelContext" ref="FailoverContext" ></property>
<property name="httpConnectionManager" ref="myHttpConnectionManager" ></property>
</bean>
<bean id="https" class="org.apache.camel.component.http.HttpComponent">
<property name="camelContext" ref="FailoverContext" ></property>
<property name="httpConnectionManager" ref="myHttpConnectionManager" ></property>
</bean>
<bean id="myHttpConnectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
<property name="params" ref="myHttpConnectionManagerParams" ></property>
</bean>
<bean id="myHttpConnectionManagerParams" class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<property name="defaultMaxConnectionsPerHost" value="100" ></property>
<property name="maxTotalConnections" value="100" ></property>
<property name="connectionTimeout" value="10000" ></property> <!-- 1 -->
<property name="soTimeout" value="10000"></property> <!-- 2 -->
</bean>
- However, we have found that when the max connections are reached, the httpconnectionmanager will wait indefinitely for a free connection. (timeout=0)
2014-06-09 13:50:36.711 | DEBUG | qtp677732217-131737 - /someUrl/getReferenceData | uuid:a6ba9dc0-efd4-11e3-85fa-c46b98301709 | ltiThreadedHttpConnectionManager | 807 - org.apache.servicemix.bundles.commons-httpclient - 3.1.0.7 | HttpConnectionManager.getConnection: config = HostConfiguration[host=https://someHost:port.com], timeout = 0
2014-06-09 13:50:36.711 | DEBUG | qtp677732217-131737 - /someUrl/getReferenceData | uuid:a6ba9dc0-efd4-11e3-85fa-c46b98301709 | ltiThreadedHttpConnectionManager | 807 - org.apache.servicemix.bundles.commons-httpclient - 3.1.0.7 | Unable to get a connection, waiting..., hostConfig=HostConfiguration[host=https://someHost:port.com]
- In the equivalent code below, we can see that the pool timeout can be set... (//3), can this be done in Fuse ?
MultiThreadedHttpConnectionManager connManag = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams managParams = connManag.getParams();
managParams.setConnectionTimeout(connectiontimeout); // 1
managParams.setSoTimeout(sotimeout); //2
HttpMethodBase baseMethod = null;
try {
HttpClient client = new HttpClient(connManag);
client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3
Environment
- Red Hat JBoss Fuse
- 6.x
- camel-http component
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
