[英]Http Client Timeout after 2 requests
我正在經歷一些我無法解釋的奇怪行為。 對於我的用例,我使用 awaitility 和 httpRequests 來檢查服務是否已經部署。 如果服務尚未准備好,OpenShift 返回 503,否則返回 200。 在 2 個請求(收到 503)之后,正常行為變成超時。 大約 2 分鍾后,手動請求仍會收到 503 和 200。
22-05-2020 11:56:33.448 INFO RetryingHttpClient.send[32] - 發送請求:GET https://serviceurl HTTP/1.1
22-05-2020 11:56:33.646 信息 RetryingHttpClient.send[34] - 接收 503
22-05-2020 11:56:43.987 INFO RetryingHttpClient.send[32] - 發送請求:GET https://serviceurl HTTP/1.1
22-05-2020 11:56:43.992 信息 RetryingHttpClient.send[34] - 接收 503
22-05-2020 11:56:54.071 INFO RetryingHttpClient.send[32] - 發送請求:GET https://serviceurl HTTP/1.1
--> 超時
public void send(HttpUriRequest request) {
log.info("Sending request (retry for 10m): {}", request);
await().atMost(10, TimeUnit.MINUTES)
.pollInterval(5, TimeUnit.SECONDS)
.ignoreExceptions()
.until(() -> client.execute(request), ResponseChecker::is2xxOrRedirectResponse);
}
為了消除一些潛在的原因,我用一個簡單的 for 循環、睡眠和擴展日志重寫了邏輯,並使用了一些可以從任何地方訪問的外部 url。
public void send(HttpUriRequest request) {
for(int i=1;60>=i;i++){
try {
log.info("Sending request: {}", request);
HttpResponse res = client.execute(request);
log.info("Receiving {}", res.getStatusLine().getStatusCode());
try{
Thread.sleep(10000);
}catch(InterruptedException edf){
System.out.println("Thread was interrupted!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
22-05-2020 14:56:33.448 INFO RetryingHttpClient.send[32] - 發送請求:GET https://www.google.de HTTP/1.1
22-05-2020 14:56:33.686 信息 RetryingHttpClient.send[34] - 接收 200
22-05-2020 14:56:43.687 INFO RetryingHttpClient.send[32] - 發送請求:GET https://www.google.de HTTP/1.1
22-05-2020 14:56:43.770 信息 RetryingHttpClient.send[34] - 接收 200
22-05-2020 14:56:53.771 INFO RetryingHttpClient.send[32] - 發送請求:GET https://www.google.de HTTP/1.1
--> 超時
如果您有任何想法,潛在的原因可能是什么,我會非常高興。 謝謝。
您的代碼正在泄漏連接。 關閉響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.