Есть пример запроса через RestTemplate поведение которого конфигурируется через ClientHttpRequestFactory и RequestConfig. При создании объекта RequestConfig задаются три разных таймаута: ConnectTimeout, ConnectionRequestTimeout, SocketTimeout. Объясните пожалуйста в чем отчичие, а то масло масляное получается. Особенно между setConnectTimeout и setConnectionRequestTimeout. А что это не одно и то же? Как может быть соединение в отрыве от запроса если мы основываемся на модели запрос ответ?
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
private ClientHttpRequestFactory getClientHttpRequestFactory() {
int timeout = 5000;
RequestConfig config = RequestConfig.custom()
// Вот тут.
.setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout)
.setSocketTimeout(timeout)
.build();
CloseableHttpClient client = HttpClientBuilder
.create()
.setDefaultRequestConfig(config)
.build();
return new HttpComponentsClientHttpRequestFactory(client);
}
Сначала HttpClient устанавливает tcp-соединение с сервером. Таймаут этого соединения определяется параметром ConnectTimeout. Обычно таймаут на данном этапе - это признак того, что сервер вообще недоступен по указанному адресу. После установки соединения клиент отправляет в это соединение http-запрос и начинает ждать ответа. Как долго он его будет ждать определяется параметром ConnectionRequestTimeout. Таймаут на данном этапе - это признак перегруженности сервера или возникших сбоев.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости