当响应为null时,释放apache http连接到池

时间:2017-09-07 09:34:14

标签: java apache-httpclient-4.x hystrix

我们正在使用apache http客户端连接到外部帮助程序系统。我们正在使用Hystrix命令来执行http请求。 当这些请求需要更多时间来响应并且时间超过Hystrix超时时,Hystrix将返回null的后备。

由于返回null,因此无法使用EntityUtils使用Http响应,因此连接不会返回到连接池。

我们已尝试使用httpGet.releaseConnection。但似乎没有用。

当http请求的响应时间超过预期时间时,将连接释放回池的最佳方法是什么?

Hystrix回归

@Override
protected CloseableHttpResponse getFallback() {
    logger.error(" Returning fallback");
    return null;
}

执行REST查询和处理结果的代码

CloseableHttpClient httpClient = //Get client from pool
HttpGet httpGet = new HttpGet(serverPath);
HystrixTestCommand testCommand = new HystrixTestCommand(httpClient, httpGet);
CloseableHttpResponse httpResponse = testCommand.execute();
if (httpResponse != null
        && httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    //Consule entity
} else if (httpResponse != null 
        && httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
    //Consule entity
} else if(httpResponse == null){
    // When http request not responded within anticipated time
    httpGet.releaseConnection();
    logger.info("Release connection");
    return null;
}

1 个答案:

答案 0 :(得分:2)

如果在请求执行过程中抛出任何异常或者请求被调用者中止,HttpClient会自动释放所有资源。您可以HttpGet#abort终止请求并确保取消分配与之关联的资源。