Apache HttpClient仅在同一HttpContext中重用连接

Apache HttpClient仅在同一HttpContext中重用连接,http,httpclient,connection-pooling,apache-httpclient-4.x,Http,Httpclient,Connection Pooling,Apache Httpclient 4.x,如何创建一个只在同一HttpContext中重用连接的连接重用策略 e、 g.在HttpContext中执行请求时,可能会重定向到外部域并返回,从而为外部域创建新连接,并在返回时重用到原始域的第一个连接 但是,一旦我完成了这个HttpContext,并且在新的HttpContext中执行了相同的请求,它就不应该重用连接,即使域是相同的。我无法手动关闭HttpClient中的所有连接,因为有并行HttpContext线程正在运行,它们不应重复使用彼此的连接。您可以利用HttpClient功能来维护

如何创建一个只在同一HttpContext中重用连接的
连接重用策略

e、 g.在HttpContext中执行请求时,可能会重定向到外部域并返回,从而为外部域创建新连接,并在返回时重用到原始域的第一个连接


但是,一旦我完成了这个HttpContext,并且在新的HttpContext中执行了相同的请求,它就不应该重用连接,即使域是相同的。我无法手动关闭HttpClient中的所有连接,因为有并行HttpContext线程正在运行,它们不应重复使用彼此的连接。

您可以利用HttpClient功能来维护有状态连接[1]

您可以通过设置在执行上下文中唯一标识特定用户的用户令牌来手动管理用户标识

HttpClientContext context = HttpClientContext.create();
context.setUserToken("user 1");
或者使用自定义用户令牌处理程序为所有请求自动执行此操作

此代码片段演示如何使用线程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]