Я правильно использую CloseableHttpClient? - PullRequest
0 голосов
/ 26 августа 2018

Вот как я использую CloseableHttpClient:

private static final CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(myurl);
HttpResponse httpResponse = httpClient.execute(httpGet);

По сути, приведенный выше код находится в одноэлементном классе, поэтому присутствует только один экземпляр httpClient, обслуживающий все запросы.

Будет ли это ударом по производительности, когда один httpClient обслуживает все запросы? Потому что я вижу медлительность в моей системе при получении httpResponse.

Также у меня есть еще один вопрос: нужно ли мне закрывать любой из вышеперечисленных ресурсов, и если да, то когда?

1 Ответ

0 голосов
/ 27 августа 2018

Рассмотрите возможность использования Диспетчер соединений пула согласно документации:

PoolingHttpClientConnectionManager - более сложная реализация, которая управляет пулом клиентских соединений и можетобслуживать запросы на подключение от нескольких потоков выполнения.Соединения объединяются для каждого маршрута.Запрос на маршрут, для которого у менеджера уже есть постоянное соединение, доступное в пуле, будет обслуживаться арендой соединения из пула, а не созданием нового соединения.

Поэтому я бы рекомендовал изменитьВаш код, такой как:

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
//configure it as per your reqiurements, i.e.
cm.setMaxTotal(5000);
cm.setDefaultMaxPerRoute(20);
CloseableHttpClient httpClient = HttpClients.custom()
    .setConnectionManager(cm)
    .build();

Также имейте в виду, что существует бесплатный инструмент с открытым исходным кодом для тестирования под названием Apache JMeter , который, в частности, использует Apache HttpComponents подкапот, так что вы можете использовать его для нагрузочного тестирования или заглянуть в базовую реализацию, если у вас есть сомнения.

Я бы порекомендовал пересмотреть ваш подход и использовать JMeter, поскольку при нагрузочном тестировании веб-приложений необходимо учитывать множество факторов (заголовки, файлы cookie, кэш, аутентификация, запросы AJAX, встроенные ресурсы и т. Д.).) и это может потребовать огромных усилий для правильной реализации всего.При необходимости вы можете создать / запустить тест JMeter через его API из кода Java, см. Пять способов запуска теста JMeter без использования JMeter GUI , чтобы получить более подробную информацию.

...