Camel:http组件的传出连接限制

时间:2014-03-27 14:50:24

标签: http parallel-processing apache-camel apache-httpclient-4.x

我有一个很少路由的驼峰上下文,简化版本如下:

<camelContext id="myContext">

    <threadPoolProfile id="defaultThreadPoolProfile" defaultProfile="true"
            poolSize="50" maxPoolSize="500" maxQueueSize="5000" rejectedPolicy="CallerRuns" />  

    <route id="rest">
        <from uri="jetty:http://0.0.0.0:8080/service?httpClient.idleTimeout=30000&amp;httpClient.soTimeout=30000&amp;httpClient.defaultMaxConnectionsPerHost=150&amp;httpClient.maxTotalConnections=1000" />
        <to uri="direct:service" />
    </route>

    <route id="service">
        <from uri="direct:service" />
        <to uri="direct:external" />
        <to uri="direct:response" />
    </route>


    <route id="external">
        <from uri="direct:external" />
        <to uri="http4://remote-host/?bridgeEndpoint=true&amp;httpClient.soTimeout=15000&amp;connectionsPerRoute=100&amp;maxTotalConnections=1000" />
        <convertBodyTo type="java.lang.String" />
    </route>

    <route id="response">
        <from uri="direct:response" />
        <to uri="xslt:response.xsl" />
    </route>

</camelContext>

在负载测试期间,我注意到,传出连接(通过http4组件)在某种程度上受到限制。尝试调整相关的组件选项(如上例所示)似乎无济于事。我尝试了以下方案:

当时使用jMeter发送50个并行请求,并在运行camel的主机上监视传入的已建立套接字连接:我随时看到与Camel建立的50个连接(到目前为止一直很好)。与此同时,我在Camel主机和远程主机端的传入连接上只看到了20个已建立的传出连接。

对我而言,似乎Camel限制了传出连接的数量?怎么解决这个?我希望在没有任何限制的情况下传递所有请求。使用Camel 2.10

1 个答案:

答案 0 :(得分:1)

您需要配置http4端点以允许更多并发连接到同一远程主机。

开始

然后检查Apache HTTP Client 4.x文档/ api以了解要设置哪个选项以增加此功能。

或者切换到使用jetty-http,所以你只需要将Jetty用于消费者/制作人,因为它也可以,并且我不记得Jetty有开箱即用的限制。有关详情,请参阅:http://camel.apache.org/how-to-use-camel-as-a-http-proxy-between-a-client-and-server.html