Таймауты в java.net.http.HttpClient не работают должным образомJAVA

Программисты JAVA общаются здесь
Anonymous
Таймауты в java.net.http.HttpClient не работают должным образом

Сообщение Anonymous »

Java Http-клиент с тайм-аутом 100 мс выдает исключение Timeout при подключении к API.
  • Я проверил, что API отвечает вызовом Curl в течение 10 мс.

    Код: Выделить всё

    curl --max-time 0.01 http://localhost:8000/

Код: Выделить всё

    @Test
public void testHTTPClient() throws URISyntaxException, IOException, InterruptedException {

HttpClient client = HttpClient.newBuilder().build().newHttpClient();
java.net.URI uri = new URI("http://localhost:8000/");
HttpRequest req = HttpRequest.newBuilder(uri).GET().timeout(Duration.ofMillis(100)).build();
long start = Instant.now().toEpochMilli();
try {
java.net.http.HttpResponse response = client.send(req, java.net.http.HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
} catch (HttpTimeoutException e) {
System.out.println("Time taken " + (Instant.now().toEpochMilli() - start));
e.printStackTrace();
}

}
Я ожидаю вывода на экран. Но я получаю следующее исключение.

Код: Выделить всё

Time taken 159

java.net.http.HttpTimeoutException: request timed out
at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:559)
at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119)
Когда я запускаю тест несколько раз с таймаутом 100 мс. Лишь немногие случаи дают успешный ответ. При большем тайм-ауте, например 150 мс, я не сталкивался с исключением тайм-аута.

Вернуться в «JAVA»