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