提问者:小点点

为Spring Web RestTemplate设置Apache HttpComponents PoolingClientConnectionManager


我正在使用RestClient连接到远程JSONAPI。以前,在Spring 3.0中,我正在使用Commons HTTPClient。我发现由于旧的多线程连接管理器中存在大量锁定,因此性能较低。

我现在想尝试Apache HttpComponents 4.2,因为它们似乎修复了锁定。我想使用PoolingClientConnectionManager作为将为不同类自动安装的DefaultHttpClient的构造函数参数。

挑战是设置PoolingClientConnectionManager连接管理器。我想要大量并发连接到JSONAPI提供程序。这些使用HttpRoute对象来表示主机名。但是,如http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingClientConnectionManager.html所述,PoolingClientConnectionManager使用setMaxPerRoute(HttpRoute, int maxConnections)方法。

如何设置连接管理器Spring context. xml文件,因为它不使用简单的setter?


共2个答案

匿名用户

如何通过扩展包装PoolingClientConnectionManager,然后使用表示路由/最大值的Bean创建设置器。即。

// Your bean
public class RouteMax() {
  private HttpRoute httpRoute;
  private int max;
  ... setters/getters
}

// Extending the PoolingClientConnectionManager
...
public class CustomPoolingClientConnectionManager extends PoolingClientConnectionManager {
...
public setRouteMax(RouteMax routeMax) {
  super.setMaxPerRoute(routeMax.getHttpRoute(), routeMax.getMax());
}

…然后在您的Spring配置中,您可以使用RouteMax bean设置routeMax属性。

匿名用户

在您的Spring context. xml文件中,使用PoolingClientConnectionManager配置httpClient的更好方法是:

<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient">
<constructor-arg>
<bean class="org.apache.http.impl.conn.PoolingClientConnectionManager">
<property name="maxTotal" value="100" />
<property name="defaultMaxPerRoute" value="50" />
</bean>
</constructor-arg>
</bean>

maxTotal和defaultMaxPerRoute属性应根据手册配置:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d5e627