如何创建仅在同一 HttpContext 中重用连接的 ConnectionReuseStrategy
。
例如在 HttpContext 中执行请求时,可能会重定向到外部域并返回,为外部域创建新连接,并在返回时重用到原始域的第一个连接。
但是,一旦我完成此 HttpContext,并在新的 HttpContext 中执行相同的请求,即使域相同,它也不应该重用连接。我无法手动关闭 HttpClient 中的所有连接,因为有并行的 HttpContext 线程在运行,它们不应重用彼此的连接。
最佳答案
您可以利用 HttpClient 功能来维护有状态连接 [1]
可以通过在执行上下文中设置唯一标识特定用户的用户 token 来手动管理用户身份
HttpClientContext context = HttpClientContext.create();
context.setUserToken("user 1");
或者使用自定义用户 token 处理程序自动处理所有请求。
此代码片段演示了如何使用线程 ID 使 HttpClient 仅在由同一线程创建时才重新使用持久连接。
UserTokenHandler userTokenHandler = new UserTokenHandler() {
@Override
public Object getUserToken(final HttpContext context) {
return Thread.currentThread().getId();
}
};
CloseableHttpClient client = HttpClients.custom()
.setUserTokenHandler(userTokenHandler)
.build();
[1] http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/advanced.html#stateful_conn
关于http - Apache HttpClient 仅在同一 HttpContext 中重用连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477446/