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