2016-05-31 9 views
2

У меня есть PoolingHttpClientConnectionManager, где я хочу установить максимальное количество соединений для каждого маршрута. Я делаю это в следующем виде:Как установить setMaxPerRoute в PoolingHttpClientConnectionManager?

poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5); 
poolingHttpClientConnectionManager.setMaxPerRoute(new HttpRoute(HttpHost.create(url)), 3); 

где, например, мой url является https://repo.maven.apache.org/maven2. Итак, у меня есть максимальный максимум по маршруту 5 и 3 на определенный URL. Тогда, если я позвоню

poolingHttpClientConnectionManager.getStats(new HttpRoute(HttpHost.create(url))); 

я получаю в результате PoolStats с max = 3, так что все нормально сейчас.

Но когда я создаю клиента с менеджером Пулы соединений и вызвать тот же URL можно увидеть в журналах:

PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {s}->https://repo.maven.apache.org:443][total kept alive: 0; route allocated: 1 of 5; total allocated: 1 of 200] 

Как я могу видеть, что это все еще использует 5 соединений, как максимум для этого примера URL. Итак, мой вопрос в том, как настроить максимальное количество соединений на какой-то маршрут, чтобы заставить его работать?

ответ

0

Хорошо мне удалось это исправить со следующим кодом:

// code to create HttpRoute the same as in apache library 
private HttpRoute getHttpRouteForUrl(String url) throws URISyntaxException 
{ 
    URI uri = new URI(url); 
    boolean secure = uri.getScheme().equalsIgnoreCase("https"); 
    int port = uri.getPort(); 
    if (uri.getPort() > 0) 
    { 
     port = uri.getPort(); 
    } 
    else if (uri.getScheme().equalsIgnoreCase("https")) 
    { 
     port = 443; 
    } 
    else if (uri.getScheme().equalsIgnoreCase("http")) 
    { 
     port = 80; 
    } 
    else 
    { 
     LOGGER.warn("Unknown port of uri %s", repository); 
    } 
    HttpHost httpHost = new HttpHost(uri.getHost(), port, uri.getScheme()); 
    // TODO check whether we need this InetAddress as second param 
    return new HttpRoute(httpHost, null, secure); 
} 

И если мы будем использовать этот HttpRoute для setMaxPerRoute все работает, как ожидалось.