Apache Http Client 5 Timeout не работает - версия httpclient5: 5.4.1JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Apache Http Client 5 Timeout не работает - версия httpclient5: 5.4.1

Сообщение Anonymous »

Я хочу настроить тайм -аут 3 секунды против https://httpbin.org/delay/5, который отвечает только через 5 секунд. Это должно убедиться, что услуга, которая занимает более трех секунд, делает тайм -аут через три секунды. Я следил за документацией и записал ниже код, где HTTPClient не истекает через 3 секунды, вместо этого требуется от 5 до 6 секунд до тайм -аута. < /P>

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

public class HttpClientTimeoutExamplePoolingHttpClientConnectionManagerBuilder {
public static void main(String[] args) {
try {

DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(SSLContext.getDefault());

final PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
.setTlsSocketStrategy(tlsStrategy)
.setDefaultSocketConfig(SocketConfig.custom()
.setSoTimeout(Timeout.of(3, TimeUnit.SECONDS))
.build())
.setMaxConnPerRoute(20)
.setMaxConnTotal(200)
.build();

final RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(Timeout.of(1, TimeUnit.SECONDS))
.setConnectTimeout(Timeout.of(3, TimeUnit.SECONDS))
.setResponseTimeout(Timeout.of(3, TimeUnit.SECONDS))
.build();

CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig)
.evictExpiredConnections()
.build();

// Create GET request
final HttpGet httpGet = new HttpGet("https://httpbin.org/delay/5");
httpGet.setConfig(requestConfig);

// Log start time
long startTime = System.currentTimeMillis();
System.out.println("Executing GET request at: " + startTime);

try {
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
long endTime = System.currentTimeMillis();
System.out.println("Response received after: " + (endTime - startTime) + "ms");
System.out.println("Response status: " + response.getCode());
System.out.println("Response body: " + EntityUtils.toString(response.getEntity()));
} finally {
response.close();
}
} catch (Exception e) {
long endTime = System.currentTimeMillis();
System.out.println("Exception after: " + (endTime - startTime) + "ms");
System.out.println("Exception type: " + e.getClass().getName());
System.out.println("Exception message: " + e.getMessage());
e.printStackTrace();
} finally {
httpClient.close();
}

} catch (Exception e) {
e.printStackTrace();
}
}
< /code>
Вывод: < /p>
App.verify.http.httpclienttimeoutexamplepoolinghttpclientConnectionManagerBuilder.main()>  Запрос Get at: 1740675604245 < /p>  >   refecting at: 1740675604245 < /p>   refecting at: 1740675604245 < /p> >  refecting at: 1740675604245 < /p>   [b] 6575ms [/b] 
Тип исключения: java.net.sockettimeoutexception 
Сообщение об исключении: чтение времени 
[b] Я пробовал другой конфигурацию (уровень сокета, уровень подключения, уровень запроса), но не мог достичь функциональности времени.  Код для использования PoolingHttpClientConnectionManager и Registry и  все начало работать [/b] 
public class HttpClientTimeoutExamplePoolingHttpClientConnectionManager {

public static void main(String[] args) {
try {

Registry registry = RegistryBuilder.create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setDefaultSocketConfig(org.apache.hc.core5.http.io.SocketConfig.custom()
.setSoTimeout(Timeout.of(3, TimeUnit.SECONDS))
.build());
connectionManager.setMaxTotal(200);
connectionManager.setDefaultMaxPerRoute(20);

// Define request config with timeouts
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(Timeout.of(1, TimeUnit.SECONDS))
.setResponseTimeout(Timeout.of(3, TimeUnit.SECONDS))
.setConnectionRequestTimeout(Timeout.of(3, TimeUnit.SECONDS))
.build();

// Build the client with timeouts applied at connection manager level
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig)
.evictExpiredConnections()
.build();

// Create GET request
final HttpGet httpGet = new HttpGet("https://httpbin.org/delay/5");
httpGet.setConfig(requestConfig);

// Log start time
long startTime = System.currentTimeMillis();
System.out.println("Executing GET request at: " + startTime);

try {
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
long endTime = System.currentTimeMillis();
System.out.println("Response received after: " + (endTime - startTime) + "ms");
System.out.println("Response status: " + response.getCode());
System.out.println("Response body: " + EntityUtils.toString(response.getEntity()));
} finally {
response.close();
}
} catch (Exception e) {
long endTime = System.currentTimeMillis();
System.out.println("Exception after: " + (endTime - startTime) + "ms");
System.out.println("Exception type: " + e.getClass().getName());
System.out.println("Exception message: " + e.getMessage());
e.printStackTrace();
} finally {
httpClient.close();
}

} catch (Exception e) {
e.printStackTrace();
}
}
output: app.verify.http.httpclienttimeoutexamplepoolinghttpclientconnectionmanager.main ()
effecting get запрос на: 1740675734246
/> Исключение после: 3540ms < /strong> < /p>
Тип исключения: java.net.sockettimeoutexception < /p>
Сообщение об исключении: чтение времени устаревший класс? Или кто -нибудь может исправить меня неправильную конфигурацию - первый класс? (Было бы здорово, если бы вы могли использовать один и тот же код с 3 вторым тайм -аутом, которые достигли 5 -секундной конечной точки API задержки) < /p>
Я попробовал https://github.com/apache/httpcomponent ... ation.java код, когда я должен был привести к тому же, что и поведен к 3-тем же, что я и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же, и тот же урл. Настроил тайм -аут как 3 секунды,
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/794 ... ient55-4-1
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Apache Http Client 5 Timeout не работает - версия httpclient5: 5.4.1
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Ошибка MongoDB: не найдено подходящих серверов (`serverselectiontryonce` set): [Timeout Timeout Socket Timeout Call Hell
    Anonymous » » в форуме Php
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Ошибка MongoDB: не найдено подходящих серверов (`serverselectiontryonce` set): [Timeout Timeout Socket Timeout Call Hell
    Anonymous » » в форуме Php
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Используйте keycloak-admin-client с httpclient5
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • SQL Server Timeout Timeout Post-Login Phase Docker .net8 openssl3.0 уже конфигурация для TLSV1
    Anonymous » » в форуме C#
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous

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