HttpConnectionManagerParams.setDefaultMaxConnectionsPerHost(int)似乎无法正常工作

时间:2013-10-09 15:21:37

标签: spring httpclient keep-alive resttemplate

我的应用程序必须handel客户端http请求,与某些API通信,并将数据返回给客户端。我为我的应用程序声明了一个全局RestTemplate,如下所示:

<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
    <constructor-arg index="0">
        <bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
            <property name="authenticationPreemptive" value="false" />
        </bean>
    </constructor-arg>
    <constructor-arg index="1">
        <bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
            <property name="params">
                <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
                    <property name="connectionTimeout" value="20000" />
                    <property name="soTimeout" value="20000" />
                    <property name="defaultMaxConnectionsPerHost" value="30" />
                    <property name="maxTotalConnections" value="500" />
                </bean>
            </property>
        </bean>
    </constructor-arg>
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="requestFactory">
        <bean class="org.springframework.http.client.CommonsClientHttpRequestFactory">
            <property name="httpClient" ref="httpClient" />
        </bean>
    </property>
</bean>

通过设置defaultMaxConnectionsPerHost,我预计每个主机的并发连接数 30 。但是通过我的测试,无论我设置多大defaultMaxConnectionsPerHost,实际数字似乎最多 6

我如何进行测试:

  • 客户端:通过浏览器同时向我的Web应用程序发送大约20个请求(我尝试过FireFox和Chrome)。
  • 服务器端:按netstat
  • 获取连接数

问题:

  • 问题1:为什么每台主机的并发连接数不是预期的30?
  • 问题2:我的应用程序必须每秒向一个主机发送大约10个请求。每个请求持续2秒。那么我应该设置defaultMaxConnectionsPerHost的适当值是什么?

1 个答案:

答案 0 :(得分:0)

经过一些测试,我发现问题中提到的测试方法可能是错误的。 defaultMaxConnectionsPerHost按预期工作。