5

Spring WebFlux Web クライアントを使用して REST 呼び出しを行っています。3000それに応じて、ミリ秒単位で接続タイムアウトを構成しました。

WebClient webClient = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(options -> options
        .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)))
    .build();

return webClient.get()
    .uri("http://localhost:8081/resource")
    .retrieve()
    .onStatus(HttpStatus::isError, clientResponse -> {
        // Some logging..
        return Mono.empty();
    })
    .bodyToMono(MyPojo.class);

このメソッドは、すべての/応答コードに対してonStatus空を返しています。接続タイムアウトや、読み取り/書き込みタイムアウトについても同じことを行うにはどうすればよいですか。今のところ、によって処理されないをスローするだけですMono400500io.netty.channel.ConnectTimeoutExceptiononStatus

@ExceptionHandlerこれらの REST 呼び出しはより複雑なフローの一部であり、空Monoの要素を介して無視する必要があるため、コントローラーには必要ありません。

に戻っspring-webRestTemplate、接続タイムアウトも . になったことを覚えていますRestClientException。したがってRestClientException、すべての例外とタイムアウトをキャッチできます。これを行う方法はありWebClientますか?

4

1 に答える 1

4

Reactor はonError***、このために複数の演算子を提供しています。

return webClient.get()
    .uri("http://localhost:8081/resource")
    .retrieve()
    .onErrorResume(ex -> Mono.empty())
    .onStatus(HttpStatus::isError, clientResponse -> {
        // Some logging..
        return Mono.empty();
    })
    .bodyToMono(MyPojo.class);
于 2018-03-12T11:24:43.963 に答える