Die anderen Antworten scheinen nicht zu sagen, warum close()
das wirklich notwendig ist. * 2
Zweifel an der Antwort "HttpClient-Ressourcenfreigabe".
Es wird im alten 3.x httpcomponents- Dokument erwähnt , das lange zurückliegt und einen großen Unterschied zu 4.x HC aufweist. Außerdem ist die Erklärung so kurz, dass sie nicht sagt, was diese zugrunde liegende Ressource ist.
Ich habe einige Nachforschungen über den Quellcode von 4.5.2 angestellt und festgestellt, dass die Implementierung von im CloseableHttpClient:close()
Grunde nur den Verbindungsmanager schließt.
(Zu Ihrer Information) Wenn Sie einen gemeinsam genutzten PoolingClientConnectionManager
Client und einen Anrufclient verwenden close()
, tritt daher eine Ausnahme java.lang.IllegalStateException: Connection pool shut down
auf. Um zu vermeiden, setConnectionManagerShared
funktioniert.
Ich mache es lieber nichtCloseableHttpClient:close()
nach jeder einzelnen Anfrage
Ich habe bei der Anforderung eine neue http-Client-Instanz erstellt und diese schließlich geschlossen. In diesem Fall ist es besser, nicht anzurufen close()
. Wenn der Verbindungsmanager kein "freigegebenes" Flag hat, wird er heruntergefahren, was für eine einzelne Anforderung zu teuer ist.
Tatsächlich habe ich auch in der Bibliothek gefunden, dass clj-http , ein Clojure-Wrapper über Apache HC 4.5, überhaupt nicht aufruft close()
. Siehe func request
in der Datei core.clj