我正在使用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?
如何通过扩展包装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