Я использую Webflux для выполнения Flux
одновременных запросов через прокси к веб-серверу.В зависимости от прокси, иногда соединение не удается.Я хотел бы перехватить эти ошибки и обработать их (в идеале, возвращая пустой Mono
объект)
2019-02-17 16:48:19.947 ERROR 32265 --- [or-http-epoll-8] r.n.resources.PooledConnectionProvider : [id: 0xf7c8834b, L:/192.168.2.247:45536 - R:101.248.64.72/101.248.64.72:80] Pooled connection observed an error
io.netty.handler.proxy.ProxyConnectException: http, none, /101.248.64.72:80 => domain.com:443, io.netty.channel.unix.Errors$NativeIoException: syscall:read(..) failed: Connection reset by peer
at io.netty.handler.proxy.ProxyHandler.setConnectFailure(ProxyHandler.java:344) [netty-handler-proxy-4.1.31.Final.jar:4.1.31.Final]
at io.netty.handler.proxy.ProxyHandler.exceptionCaught(ProxyHandler.java:246) [netty-handler-proxy-4.1.31.Final.jar:4.1.31.Final]
Эти сообщения очень длинные и делают журнал нечитаемым позже, если требуется отладка.Я пытался перехватить его в соответствии с кодом запроса с помощью .onErrorResume(err -> Mono.empty())
, но, похоже, это не предотвращает журналы ошибок.
Ниже приведен мой код:
return proxiedWebClient
.get()
.uri(uri)
.exchange()
.flatMap(clientResponse -> clientResponse.toEntity(String.class))
.onErrorResume(error -> Mono.empty());
ожидаемый результат заключается в том, что ошибки соединения просто сбрасываются и не добавляются в Flux
при последующем вызове Flux.merge
.