Hi,
I need to replace the HttpConnectionManager of a Camel context within SMX4.5.3 
because the http requests resulting from the Camel route are load-balanced 
before hitting the backend server. Problem is that the connections are kept 
open and no load-balancing is done. Only way I see is to either provide a 
Connection-header which is currently filtered out by the default 
HeaderFilterStrategy implementation or by enforcing the close of the connection 
by replacing the HttpConnectionManager. Tried a few other things like 
http.keepAlive=false as JVM parameter and stuff like this and nothing worked 
for me. Any further ideas?

So I first tried to replace the HttpConnectionManager and/or 
HeaderFilterStrategy by the following:

  <bean id="httpz" class="org.apache.camel.component.http.HttpComponent">
    <property name="camelContext" ref=“myTestContext"/>
    <property name="httpConnectionManager" ref="myHttpConnectionManager"/>
    <property name="headerFilterStrategy"  ref="myHeaderFilterStrategy"/>
  </bean>
  <bean id="myHttpConnectionManager" 
class=“playground.ForcedCloseHttpConnectionManager">
    <argument value="true"/>
    <property name="params" ref="myHttpConnectionManagerParams"/>
  </bean>
  <bean id="myHeaderFilterStrategy" class="playground.HttpHeaderFilterStrategy">
  </bean>
  <bean id="myHttpConnectionManagerParams" 
class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
    <property name="defaultMaxConnectionsPerHost" value="5"/>
  </bean>
:
<camelContext id=“myTestContext”>
  :
  <to uri=“httpz:http://127.0.0.1:8080/test/process”/>
  :
</camelContext>

The “playground.ForcedCloseHttpConnectionManager” is a copy of the 
MultiThreadedHttpConnectionManager class provided by Camel with some log 
messages added (enabled by the constructor argument ’true’).

The “playground.HttpHeaderFilterStrategy” is a copy of the 
HttpHeaderFilterStrategy class provided by Camel - again with some log messages 
added.

The log shows that the beans got initialised. Switching SMX to DEBUG level and 
executing the route shows that the MultiThreadedHttpConnectionManager is still 
used to handle the connections.

Thanks for any help,
harald

Reply via email to