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

时间:2014-03-18 11:04:48

标签: http httpclient connection-pooling apache-httpclient-4.x

如何创建仅在同一HttpContext中重用连接的ConnectionReuseStrategy

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

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

1 个答案:

答案 0 :(得分:2)

您可以利用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] http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/advanced.html#stateful_conn