Мой код Java использует общий Apache HttpClient 4.4.1.Я установил тайм-аут соединения, тайм-аут сокета и тайм-аут запроса на индивидуальный уровень запроса POST равным 100 миллисекундам.Работает нормально большую часть времени.Однако при большом объеме запросов (стресс-тест) HttpClient игнорирует эти тайм-ауты;запросы могут занимать 20 секунд и более.Вот мой код:
private HttpResponse execHttp(HttpRequestBase request, HttpClient client) {
RequestConfig params = RequestConfig.custom()
.setConnectTimeout(100)
.setSocketTimeout(100)
.setConnectionRequestTimeout(100)
.build();
// Set config
request.setConfig(params);
// Measure time
long tStart = System.currentTimeMillis();
// Execute Http request
HttpResponse response = client.execute(request);
// Calculate and print time
long tDiff = System.currentTimeMillis() - tStart;
logger.debug(String.format("HTTPCLIENT EXEC TIME: FROM REQUEST %d / %d / %d MS ACTUAL %d MS",
request.getConfig().getSocketTimeout(),
request.getConfig().getConnectTimeout(),
request.getConfig().getConnectionRequestTimeout(),
tDiff));
return response;
}
В некоторых случаях я получаю такую запись в журнале:
2018-10-26 14: 18: 45,496 [my-thread-1] DEBUGcom.mypackage.HttpTimeoutTest - HTTPCLIENT EXEC TIME: FROM REQUEST 100/100/100 MS ACTUAL 20044 MS
Чего-нибудь не хватает в коде?Или есть обходной путь, как заставить его всегда применять тайм-аут?