Apache HTTP Client 5 Timeout funktioniert nicht - Version httpclient5: 5.4.1Java

Java-Forum
Anonymous
 Apache HTTP Client 5 Timeout funktioniert nicht - Version httpclient5: 5.4.1

Post by Anonymous »

Ich möchte eine Auszeit von 3 Sekunden gegen https://httpbin.org/delay/5 konfigurieren, die nur nach 5 Sekunden wieder reagieren. Dies soll sicherstellen, dass ein Service, der mehr als drei Sekunde dauert, nach drei Sekunden eine Auszeit leistet. Ich habe die Dokumentation befolgt und unter dem Code geschrieben, in dem der HTTPClient nach 3 Sekunden nicht abgestimmt ist. Stattdessen dauert es zwischen 5 und 6 Sekunden bis zur Zeitüberschreitung. < /P>

Code: Select all

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>
Ausgabe: < /p>
App.verify.http.httpclientTimeOutExamplePoolinghttpclientConnectionManagerBuilder.main()
Ausführen von Ausnahme: 1740675604245 < /p> < /  
 < /  < / < /   Ausnahme nach:  3540ms < /strong> < /p>
Ausnahmetyp: java.net.sockettimeoutexception < /p>
Ausnahmenachricht: Lesen Sie zeitgesteuerte Aussagen. Timeout mit nicht veralteter Klasse erreichen? Oder kann mir jemand die falsche Konfiguration korrigieren, ist die erste Klasse? (Wäre großartig, wenn Sie denselben Code mit 3 Sekunden -Timeout verwenden können, der den Endpunkt der API -Endpunkt von 5 Sekunden erreicht hat.) < /P>
Ich habe es ausprobiert https://github.com/apache/httpcomponents-client/blob/5.5.x/httpclient5/src/test/java/org/apache/hc/client5/http/examples/clientConfiguration.java-Code. Konfigurierte die Zeitlimit als 3 Sekunden, 
Danke

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post