HttpClient входит в состав Java начиная с Java 11. Как думаете, какие таймауты на подключение у него по умолчанию? Например, если мы создаём запрос так:
1 2 3 4 5 6 7 |
HttpRequest getRequest = HttpRequest .newBuilder(someUri) .GET() .build(); HttpResponse<byte[]> httpResponse = HttpClient.newHttpClient() .send(getRequest, BodyHandlers.ofByteArray()); |
То getRequest будет без какого-либо ограничения на время выполнения. Это не есть хорошо, так как по факту наше приложение просто зависнет.
HttpClient из Java не имеет ограничения по времени выполнения запросов по умолчанию.
Поэтому обязательно нужно устанавливать таймаут с помощью метода timeout у builder-а, который принимает Duration из Java Time:
1 2 3 4 5 |
HttpRequest getRequest = HttpRequest .newBuilder(someUri) .GET() .timeout(Duration.ofSeconds(10L)) .build(); |
Мы также можем настроить таймаут не только для конкретного запроса, но и для экземпляра HttpClient, который в последствии можно использовать для разных запросов:
1 2 3 4 |
HttpClient httpClient = HttpClient .newBuilder() .connectTimeout(Duration.ofSeconds(10L)) .build() |