处于静止状态时禁用重试/保持活动状态,以确保较长的响应时间(每60秒不重试)

问题描述 投票:0回答:1

我有一个问题,当响应时间超过60秒时,Rest-Assured似乎会发出第二个和第三个呼叫。我需要的是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中设置标题

        return given()
                .relaxedHTTPSValidation()
                .baseUri(cloudBaseurl)
                .header(HttpHeaders.CONNECTION,"Keep-Alive")
                .header("Keep-Alive","timeout=100", "max=180")
                .when()
                .get(fullServicePath)
                .then().extract().response();

没有变化。 60秒后仍然是第二个请求。

3。更改默认请求行为(如此处建议:HttpClient executes requests multiple time if request timed out

        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 apache-httpclient-4.x rest-assured kubernetes-ingress
1个回答
0
投票

我看错了方向。

需要增加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"
© www.soinside.com 2019 - 2024. All rights reserved.