问题描述
上下文
我有一个 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
实例时将其标记为共享。