1

我有一个骆驼上下文与几条路线,简化版本看起来像:骆驼:传出连接限制为HTTP组件

<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正在运行的主机上的传入已建立的套接字连接:我发现在任何时候都有50个与骆驼建立连接(迄今为止这么好)。同时,我在骆驼主机和远程主机端的传入连接上也只能看到20个建立的传出连接。

对我来说,似乎骆驼限制传出连接的数量?如何解决这个问题?我希望所有请求都能通过而不会受到任何限制。使用骆驼2.10

回答

1

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

开始

然后签了Apache HTTP客户端4.x的文档/ API知道哪个选项设置来增加此。

或切换到使用码头-HTTP代替你只需要使用码头为消费者/生产作为工作的很好,我不记得码头有这样的限制开箱。查看更多:http://camel.apache.org/how-to-use-camel-as-a-http-proxy-between-a-client-and-server.html

+0

谢谢!不幸的是,我无法快速找到哪个Apache HTTP Client 4.x设置能够做到这一点(尽管知道它仍然很有趣),但是使用jetty组件来解决问题! – Laimoncijus