복붙노트

[SPRING] Spring Webflux Reactive WebClient를 사용하여 연결 시간 제한 설정

SPRING

Spring Webflux Reactive WebClient를 사용하여 연결 시간 제한 설정

(기본값) WebClient에 대한 (연결) 시간 제한을 설정하는 올바른 방법은 무엇입니까?

Mono (또는 Flux)에서 Mono # timeout (Duration) 메서드를 사용하는 것으로 충분합니까? 또는 이로 인해 메모리 / 연결 누출이 발생할 수 있습니까?

미리 감사드립니다.

(Webclient에 대한 시간 제한을 설정하는 방법은 Spring 5 webflux의 대답은 작동하지 않습니다!)

해결법

  1. ==============================

    1.Reactor Netty 0.8 및 Spring Framework 5.1에서 다음과 같이 연결, 읽기 및 쓰기 시간 초과를 설정할 수 있습니다.

    Reactor Netty 0.8 및 Spring Framework 5.1에서 다음과 같이 연결, 읽기 및 쓰기 시간 초과를 설정할 수 있습니다.

    TcpClient tcpClient = TcpClient.create()
                     .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000) // Connection Timeout
                     .doOnConnected(connection ->
                             connection.addHandlerLast(new ReadTimeoutHandler(10)) // Read Timeout
                                       .addHandlerLast(new WriteTimeoutHandler(10))); // Write Timeout
    WebClient webClient = WebClient.builder()
        .clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
        .build();
    
  2. ==============================

    2.현재로서는 WebClient가 최상위 구성 옵션으로 해당 옵션을 제공하지 않습니다. 기본 HTTP 클라이언트 라이브러리에서이를 구성해야합니다.

    현재로서는 WebClient가 최상위 구성 옵션으로 해당 옵션을 제공하지 않습니다. 기본 HTTP 클라이언트 라이브러리에서이를 구성해야합니다.

    그래서 다른 질문에 대한 답은 맞습니다. 그러나 귀하의 경우에는 소켓 시간 초과 (또는 둘 모두)가 아닌 연결 시간 초과를 변경해야 할 수 있습니다.

    ReactorClientHttpConnector connector =
                new ReactorClientHttpConnector(options ->
                        options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2000));
    WebClient webClient = WebClient.builder().clientConnector(connector).build();
    
  3. from https://stackoverflow.com/questions/48096573/set-connection-timeout-using-spring-webflux-reactive-webclient by cc-by-sa and MIT license