Мы используем http-клиент apache для подключения к внешним вспомогательным системам. И мы используем команды Hystrix для выполнения http-запросов. Когда для ответа на эти запросы требуется больше времени и время превышает тайм-аут Hystrix, Hystrix вернет резервный вариант, который равен нулю.
Поскольку он возвращает нулевой ответ Http, его нельзя использовать с помощью EntityUtils
, и, следовательно, соединение не возвращается в пул соединений.
Мы пытались использовать httpGet.releaseConnection
. Но, похоже, это не работает.
Каков наилучший способ вернуть соединение обратно в пул, когда HTTP-запрос требует больше времени для ответа, чем ожидалось?
Хайстрикс отступает
@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;
}