在 Rest Assured 中禁用重试 / keep-alive 以获得较长的响应时间(每 60 秒不重试)
Disable retry / keep-alive in Rest Assured for long responsetimes (no retry every 60 sec)
我有一个问题,当响应时间超过 60 秒时,Rest-Assured 似乎发出了第 2 次和第 3 次调用。我需要的是 RestAssured 等待呼叫完成而不发送更多呼叫。
对响应时间超过 60 秒的端点的简单测试:
return given()
.relaxedHTTPSValidation()
.baseUri(cloudBaseurl)
.when()
.get(fullServicePath)
.then().extract().response();
问题是我在所请求服务的日志记录中看到恰好 60 秒后,第二次呼叫进入,又是 60 秒后第三次呼叫。默认情况下,RestAssured 似乎会在 3 分钟后超时。
我试过的:
1。设置不同的参数
RestAssured.config= RestAssuredConfig.config().httpClient(httpClientConfig().
setParam("http.connection.timeout",70000).
setParam("http.connection.request.timeout",70000).
setParam("http.socket.timeout",70000).
setParam("http.connection-manager.timeout",70000).
setParam("http.conn-manager.timeout",70000L).
setParam("http.connection.stalecheck",false).
setParam("http.keepAlive",70000L));
它确实在 70 秒后超时,但仍然在 60 秒后第二次调用进来。
2。在 RestAssured
中设置 headers
return given()
.relaxedHTTPSValidation()
.baseUri(cloudBaseurl)
.header(HttpHeaders.CONNECTION,"Keep-Alive")
.header("Keep-Alive","timeout=100", "max=180")
.when()
.get(fullServicePath)
.then().extract().response();
没有变化。 60 秒后仍然是第 2 个请求。
3。更改默认请求行为(如此处建议:)
RestAssured.config = RestAssured.config().httpClient(httpClientConfig().httpClientFactory(
() -> {
SystemDefaultHttpClient systemDefaultHttpClient = new SystemDefaultHttpClient();
ClientConnectionManager connectionManager = systemDefaultHttpClient.getConnectionManager();
connectionManager.closeIdleConnections(100, TimeUnit.SECONDS);
// Disable default behavior of HttpClient of retrying requests in case of failure
((AbstractHttpClient) systemDefaultHttpClient).setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
return systemDefaultHttpClient;
}));
我看错方向了
需要增加 Kubernetes 中 Ingress 的超时时间。将以下内容添加到 Kubernetes 部署 yaml 解决了这个问题。
metadata:
name: your-service-name
labels:
app: your-service-name
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-connect-timeout : "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout : "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout : "3600"
我有一个问题,当响应时间超过 60 秒时,Rest-Assured 似乎发出了第 2 次和第 3 次调用。我需要的是 RestAssured 等待呼叫完成而不发送更多呼叫。
对响应时间超过 60 秒的端点的简单测试:
return given()
.relaxedHTTPSValidation()
.baseUri(cloudBaseurl)
.when()
.get(fullServicePath)
.then().extract().response();
问题是我在所请求服务的日志记录中看到恰好 60 秒后,第二次呼叫进入,又是 60 秒后第三次呼叫。默认情况下,RestAssured 似乎会在 3 分钟后超时。
我试过的:
1。设置不同的参数
RestAssured.config= RestAssuredConfig.config().httpClient(httpClientConfig().
setParam("http.connection.timeout",70000).
setParam("http.connection.request.timeout",70000).
setParam("http.socket.timeout",70000).
setParam("http.connection-manager.timeout",70000).
setParam("http.conn-manager.timeout",70000L).
setParam("http.connection.stalecheck",false).
setParam("http.keepAlive",70000L));
它确实在 70 秒后超时,但仍然在 60 秒后第二次调用进来。
2。在 RestAssured
中设置 headers return given()
.relaxedHTTPSValidation()
.baseUri(cloudBaseurl)
.header(HttpHeaders.CONNECTION,"Keep-Alive")
.header("Keep-Alive","timeout=100", "max=180")
.when()
.get(fullServicePath)
.then().extract().response();
没有变化。 60 秒后仍然是第 2 个请求。
3。更改默认请求行为(如此处建议:)
RestAssured.config = RestAssured.config().httpClient(httpClientConfig().httpClientFactory(
() -> {
SystemDefaultHttpClient systemDefaultHttpClient = new SystemDefaultHttpClient();
ClientConnectionManager connectionManager = systemDefaultHttpClient.getConnectionManager();
connectionManager.closeIdleConnections(100, TimeUnit.SECONDS);
// Disable default behavior of HttpClient of retrying requests in case of failure
((AbstractHttpClient) systemDefaultHttpClient).setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
return systemDefaultHttpClient;
}));
我看错方向了
需要增加 Kubernetes 中 Ingress 的超时时间。将以下内容添加到 Kubernetes 部署 yaml 解决了这个问题。
metadata:
name: your-service-name
labels:
app: your-service-name
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-connect-timeout : "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout : "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout : "3600"