Я правильно использую CloseableHttpClient?

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

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

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

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

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

1 ответ

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

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.

Другие вопросы по тегам