RestTemplate Timeout не работает более 30 секунд - PullRequest
1 голос
/ 29 мая 2020
 @Controller
public class RestTemplateConfig {

  @Bean
  public RestTemplate restTemplate() {
      return new RestTemplate(clientHttpRequestFactory());
  }

  private ClientHttpRequestFactory clientHttpRequestFactory() {
      HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
      factory.setReadTimeout(120000);
      factory.setConnectTimeout(120000);
    return factory;
  }
}

Когда я звоню в свою службу для получения большого количества данных, мне требуется около 80-90 секунд, чтобы вернуть ответ (плохой дизайн, но это уже другая проблема). Я пытаюсь увеличить тайм-аут шаблона отдыха на стороне клиента более 120 секунд. Заказчик - весенний пакетный заказ. Но это не работает. Время ожидания составляет около 30 секунд. Это происходит, когда клиент находится на моем локальном компьютере, а служба, которую я вызываю, работает на сервере. А также когда клиент и сервис находятся на сервере. Ошибка. Я получаю тайм-аут исключения шлюза 504. Служба, которую я вызываю, работает нормально, просто для возврата данных требуется слишком много времени. Но когда клиент и служба работают на моем локальном компьютере, тайм-аут работает нормально. Кто-нибудь знает, что вызывает это?

Выше - соответствующая часть кода.

Вот мои результаты после попытки отладки

  1. Я думаю, что код здесь не проблема, потому что он работает локально (может потребоваться добавить больше кода, чтобы он работал снаружи локальный компьютер?).
  2. Это также работает, когда я пытаюсь уменьшить тайм-аут, например, на 5 секунд. Но не будет работать 120-секундный тайм-аут -> как для локальной машины, так и на серверах. В заключение: все, что меньше 30 - 36 секунд, можно контролировать с помощью restTemplate timeout. Когда он идет выше, это не работает. Я знаю, что люди действительно реализовали таймауты более 60 секунд. Так что это должно быть возможно. Так что мне здесь не хватает? Какие-то ограничения по таймауту сервера? Если это так, есть ли способ отменить это, внеся изменения в мой код? Я не могу вносить изменения в серверы.

Я почти уверен, что это будет хорошая головоломка для всех вас, ребята.

...