2012-06-30 7 views
3

Я использую RestClient для подключения к удаленному JSON API. Раньше, в Spring 3.0, я использовал Commons HTTPClient. Я обнаружил, что производительность была низкой из-за большого количества блокировок в старом многопоточном диспетчере соединений.Настройка Apache HttpComponents PoolingClientConnectionManager для Spring Web RestTemplate

Теперь я хочу попробовать 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.xml, поскольку он не использует простые сеттеры?

ответ

1

Как обернуть объединение PoolingClientConnectionManager, расширив его, а затем создав сеттеры, используя Bean, представляющий значение route/max. То есть.

// 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 с помощью компонента RouteMax.

1

В файле context.xml Spring, лучший способ настроить ваш HTTPClient с PoolingClientConnectionManager является:

<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

Смежные вопросы