3

我正在使用RestClient连接到远程 JSON API。以前,在 Spring 3.0 中,我使用的是 Commons HTTPClient。我发现由于旧的多线程连接管理器中有很多锁定,性能很低。

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

挑战在于设置PoolingClientConnectionManager连接管理器。我想要与 JSON API 提供程序的大量并发连接。这些使用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 文件,因为它不使用简单的设置器?

4

2 回答 2

1

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

// 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 属性。

于 2012-07-26T18:09:24.363 回答
1

在 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

于 2013-08-21T07:04:35.080 回答