Spring WebFlux обрабатывает веб-клиента ConnectTimeoutException
Я использую веб-клиент Spring WebFlux для выполнения вызовов 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
метод возвращает пустое Mono
для каждого 400
/ 500
код ответа. Как я могу сделать то же самое для тайм-аута соединения и, возможно, даже таймаутов чтения / записи. Как сейчас его просто бросает io.netty.channel.ConnectTimeoutException
который не обрабатывается onStatus
Мне не нужен @ExceptionHandler
на моем контроллере, так как эти вызовы REST являются частью более сложного потока, и через пустой Mono
элемент должен быть просто проигнорирован.
Вернуться в spring-web
с RestTemplate
Я помню, тайм-аут подключения также привел к RestClientException
, Таким образом, мы могли бы просто поймать RestClientException
для всех исключений и тайм-аутов. Есть ли способ, которым мы можем сделать это с WebClient
также?
1 ответ
Реактор предлагает несколько 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);