Чем отличаются ConnectTimeout и ConnectionRequestTimeout?

292
24 июня 2018, 02:10

Есть пример запроса через 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);
}
Answer 1

Сначала HttpClient устанавливает tcp-соединение с сервером. Таймаут этого соединения определяется параметром ConnectTimeout. Обычно таймаут на данном этапе - это признак того, что сервер вообще недоступен по указанному адресу. После установки соединения клиент отправляет в это соединение http-запрос и начинает ждать ответа. Как долго он его будет ждать определяется параметром ConnectionRequestTimeout. Таймаут на данном этапе - это признак перегруженности сервера или возникших сбоев.

READ ALSO
подключение oracle database к приложению javaFX

подключение oracle database к приложению javaFX

установил Oracle Database 11g + SQLDeveloperСоздал нового пользователя и connection

259
Объясните на пальцах, в чем отличие Thread, Handler, Runnable и AsyncTask?

Объясните на пальцах, в чем отличие Thread, Handler, Runnable и AsyncTask?

Пожалуйста, объясните по простому в чем отличие Thread, Handler, Runnable и AsyncTask?

275
Перенести ветку из одного репозитария в другой

Перенести ветку из одного репозитария в другой

Есть репозитарийСоздал ветку, сделал какие-то правки

332
Как вывести данные из array которые уже находятся в array в json файле? (Java)

Как вывести данные из array которые уже находятся в array в json файле? (Java)

Пишу парсер json на Java с использованием библиотеки json-SimpleНужно вытащить данные из URL

345