header HTTP "connection close" z WireMockiem

0

cześć, mockuję sobie odpowiedź

var wireMockRule = new WireMockRule("9999");
wireMockRule.stubFor(
    post("xxxx/myapp"))
            .willReturn(
                        aResponse()
                                .withHeader("Content-Type", "application/json")
                                .withHeader("Connection", "close")
                                .withBody("""
                                    xxxx
                                    }""")
                )
);

i jak strzelę za pomoca restTemplate pod ten adres to przy kazdym strzale odpowiedź opóźnia się o 1 dodatkową sekundę.

var restTemplate = new RestTemplate();
restTemplate.postForEntity("xxxx/myapp", ... );

jak wyrzucę z headera Connection close to odpowiada praktycznie od razu (22ms).

Nie udało mi się tego przedebugować. Na czym polega problem? Kwestia ustawień RestTemplate?

0

Zgaduje że connection close leci tam dopiero po jakimś czasie, a tak to dane lecą jakimiś chunkami. Zresztą w ogóle nie bardzo rozumiem po co matchować connection close.

0
Shalom napisał(a):

Zresztą w ogóle nie bardzo rozumiem po co matchować connection close.

https://stackoverflow.com/questions/68929051/wiremock-sometimes-it-throws-software-caused-connection-abort-recv-failed

wywala sie czasem bez tego

1

Proponuję dodać logger na poziomie debug dla org.apache.http i zobaczyć co robi Apache client.

Do głowy przyszły mi też takie opcje, których możesz spróbować przy budowaniu klienta w testach:

        var connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setValidateAfterInactivity(1);
        connectionManager.setDefaultSocketConfig(
            SocketConfig.custom()
                .setTcpNoDelay(true)
                .build()
        );

        var httpClient = HttpClientBuilder.create()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(
                RequestConfig.custom()
                    .setExpectContinueEnabled(false)
                    .build()
            )
            .build();
0

@damianem: o coś jest!

23:50:19.993 [myservice2-executor-thread2] DEBUG xxx.DefaultManagedHttpClientConnection - http-outgoing-3: Close connection
23:50:19.994 [myservice3-executor-thread3] DEBUG xxx.PoolingHttpClientConnectionManager - Connection [id: 2][route: {}->http://localhost:9999] can be kept alive indefinitely
23:50:19.994 [myservice3-executor-thread3] DEBUG xxx.DefaultManagedHttpClientConnection - http-outgoing-2: set socket timeout to 0
23:50:19.994 [myservice3-executor-thread3] DEBUG xxx.PoolingHttpClientConnectionManager - Connection released: [id: 2][route: {}->http://localhost:9999][total available: 2; route allocated: 2 of 200; total allocated: 2 of 500]
23:50:20.995 [myservice2-executor-thread2] DEBUG xxx.execchain.MainClientExec - Connection discarded
23:50:20.995 [myservice2-executor-thread2] DEBUG xxx.PoolingHttpClientConnectionManager - Connection released: [id: 3][route: {}->http://localhost:9999][total available: 0; route allocated: 0 of 200; total allocated: 0 of 100]

1002 ms. trwa zamykanie od Close connection do Connection discarded

0

@damianem: wskazana przez Ciebie konfiguracja jak i moje wlasne proby rniestety nie pomagaja

1

@borys.borys.boryss: Delay przy close może wskazywać na opcję socketu SO_LINGER - możesz spróbować:

SocketConfig.custom()
        .setSoLinger(0)
        .build()
0

bez zmian, chyba bede musial prezdebugowac tego clienta

1 użytkowników online, w tym zalogowanych: 0, gości: 1