我们正在使用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;
}
答案 0 :(得分:2)
如果在请求执行过程中抛出任何异常或者请求被调用者中止,HttpClient会自动释放所有资源。您可以HttpGet#abort
终止请求并确保取消分配与之关联的资源。