And*_*dyB 2 reactor-netty spring-webclient
我已经实现了一个服务,它使 ReST 调用其他服务来实现其部分功能。我正在使用反应式WebClient,例如:
webClient.post()
.uri(....)
.contentType(....)
.accept(....)
.header(....)
.syncBody(someRequestObject)
.exchange()
.flatMap(someResponseHandler::handleResponse)
.doOnError(throwable -> {
// do interesting things depending on throwable
})
.retry(1, this::somePredicateDependingOnThrowable);
Run Code Online (Sandbox Code Playgroud)
现在...我处理 HTTP 状态someResponseHandler::handleResponse,但我真正想知道的是,还有哪些其他类型的异常/错误exchange()- 即
显然,这些都不是 HTTP 状态代码 - 但我找不到任何文档来告诉我可以查找什么。我只是没有找对地方吗?我浏览了反应式 WebClient 的文档,也浏览了 Reactor Netty 参考指南,但没有成功。
对于背景来说,这很重要,因为我们进行基于 HATEOAS 的服务发现 - 对于其中一些异常,我想触发重新发现,对于其中一些,我不想。
我建议测试使用的代码,WebClient看看它如何处理您提到的各种场景。MockWebServer您可以通过单元测试轻松地测试您的代码。MockWebServer可以模拟这里提到的大多数错误。
话虽如此,这是我在测试中WebClient使用ReactorClientHttpConnector. 其他连接器可能会抛出略有不同的异常,但可能会在异常类层次结构中共享一个超类,如下所述。
java.net.UnknownHostException
java.net.ConnectException(或子类)
反应堆网络抛出io.netty.channel.AbstractChannel$AnnotatedConnectException
如果您配置了连接超时,那么您将收到java.net.ConnectException(或子类)
反应堆网络抛出io.netty.channel.ConnectTimeoutException
javax.net.ssl.SSLHandshakeException(或子类)
这因所使用的编码器而异,但通常是org.springframework.core.codec.EncodingException(或子类)
java.lang.IllegalStateException如果编码配置不正确,一些编码器也会抛出异常
这因所使用的解码器而异,但通常是org.springframework.core.codec.DecodingException(或子类)
java.lang.IllegalStateException如果解码配置不正确,某些解码器也会抛出异常
如果使用reactor-netty,并且您配置了io.netty.handler.timeout.ReadTimeoutHandler,那么io.netty.handler.timeout.ReadTimeoutException
.timeout如果您在反应流调用链中的某个位置使用该运算符,那么java.util.concurrent.TimeoutException
如果使用reactor-netty,并且您配置了io.netty.handler.timeout.WriteTimeoutHandler,那么io.netty.handler.timeout.WriteTimeoutException
java.io.IOException(或子类)
反应堆网络抛出reactor.netty.http.client.PrematureCloseException
您期间发生的任何异常情况someResponseHandler::handleResponse
| 归档时间: |
|
| 查看次数: |
3009 次 |
| 最近记录: |