Другие ответы, похоже, не объясняют, почему close()
это действительно необходимо? * 2
Сомневаюсь в ответе "Освобождение ресурса HttpClient".
Он упоминается в старом документе httpcomponents 3.x , который появился давно и сильно отличается от 4.x HC. К тому же объяснение настолько краткое, что не говорит, что это за основной ресурс.
Я провел небольшое исследование исходного кода выпуска 4.5.2, обнаружил, что реализация в CloseableHttpClient:close()
основном закрывает только его диспетчер соединений.
(FYI) Вот почему, когда вы используете общий PoolingClientConnectionManager
и вызывающий клиент close()
, java.lang.IllegalStateException: Connection pool shut down
произойдет исключение . Чтобы избежать, setConnectionManagerShared
работает.
Я предпочитаю не делать CloseableHttpClient:close()
после каждого запроса
Раньше я создавал новый экземпляр http-клиента при выполнении запроса и, наконец, закрывал его. В этом случае лучше не звонить close()
. Поскольку, если диспетчер соединений не имеет флага «общий», он будет отключен, что слишком дорого для одного запроса.
Фактически, я также обнаружил в библиотеке clj-http , оболочку Clojure над Apache HC 4.5, которая вообще не вызывает close()
. См. Funcrequest
в файле core.clj