Мы используем AsynHttpClient в нашем приложении. У нас есть сценарий использования, когда мы должны делать огромное количество запросов на запуск и забытие, так как при этом используется NIo, мы подумали, что это хороший подход.
Клиент AHC , как упомянуто в документации, предлагаетон разделяет жизненный цикл как приложение («экземпляры AsyncHttpClient предназначены для глобальных ресурсов, которые используют тот же жизненный цикл, что и приложение»).
Итак, я инициализировал клиент AHC один раз и продолжал его использовать.
Обзор функциональности:
public class Client{
private static AsyncHttpClientConfig asyncHttpClientConfig = new AsyncHttpClientConfig().Builder().setRequestTimeout(someMs).setMaxRetryCount()
private static AsyncHttpClient asyncHttpClient = AsyncHTTPClientFactory.getAsyncHttpClient(asyncHttpClientConfig)
public static AsyncHttpClient getClient(){
return asyncHttpClient;
}
}
public class Usageclass{
// some code
AsyncHttpClient asyncHttpClient = Client.getClient();
Future response = asyncHttpClient.setRootEndpoint(url).setBody(body).execute();
}
Мы сможем отслеживать память JVM, доступную через панель мониторинга, предоставленную другой командой. Я вижу, что память JVM, доступная в приложении, уменьшается при поступлении запросов, как только включается GC (сборщик мусора), я вижу, что память не полностью освобождена. Каждый раз, когда выполняется сборка мусора, доступная память JVM уменьшается по сравнению с предыдущими запусками.
Я хотел бы знать, потому что мы не закрываем соединение AHC? Если да, то какой будет правильный подход?