在 Apache 中将 HttpClientConnectionManager 与 CloseableHttpClient 一起使用的正确方法是什么? 上下文使用 HttpClientConnectionManager 的正确方法是什么?

问题描述

上下文

我有一个 org.apache.hc.client5.http.impl.classic.CloseableHttpClient 实例 和 org.apache.hc.client5.http.io.HttpClientConnectionManager 的单例实例,用于与某些远程 API 进行通信。

我创建了一个 HTTP 连接的单例池来创建 HTTP 客户端的实例。

使用 HttpClientConnectionManager 的正确方法是什么?

我真的应该使用 try-with-resource(或旧式 try-finally)来处理 CloseableHttpClient 吗?

如果我关闭 HTTP 客户端,连接也会从这个池中关闭。然后我就无法使用这个池与远程 API 进行通信。

当然,我已经阅读了文档 https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

也许我错过了什么。谁能解释一下?

解决方法

您还应该将 CloseableHttpClient 用作单例(基于每个不同的服务)。

如果您想继续使用相同的 CloseableHttpClient 创建 HttpClientConnectionManager 的短期实例,请确保在使用 CloseableHttpClient 创建 HttpClientBuilder 实例时将其标记为共享。