1
我們使用apache http客戶端連接到外部幫助系統。我們使用Hystrix命令來執行http請求。 當這些請求需要更多時間來響應並且時間超過Hystrix超時時,Hystrix將返回爲空的回退。當響應爲空時釋放apache http連接到池
由於它返回null使用EntityUtils
不能消耗Http響應,因此連接不會返回到連接池。
我們嘗試過使用httpGet.releaseConnection
。但它似乎不起作用。
當http請求比預期時間需要更多時間響應時,釋放連接回池的最佳方式是什麼?
蝟回落
@Override
protected CloseableHttpResponse getFallback() {
logger.error(" Returning fallback");
return null;
}
代碼來執行
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;
}
它似乎在中止後釋放連接。謝謝 –
但是releaseConnection和abort方法有什麼區別? 他們確實重置了一些原子變量。實施依賴於他們? –
就資源管理而言,他們幾乎做同樣的事情。但是,#abort方法會將請求對象留在無效(中止)狀態,而#releaseConnection和#reset方法會將請求重置爲其初始狀態,從而使其可以重新使用和重新執行。 – oleg