HttpClient
从提供了各种要配置的“超时”,有两个让我有点困惑:
This is time that takes to receive a response after sending a request
Raises a ReadTimeoutException when no data was read within a certain period of time
有人可以解释一下它们之间的主要区别吗?
通用场景 - 使用 spring 响应式(Reactive)调用电话
WebClient
, 使用 HttpClient
引擎盖下:ChannelOption.CONNECT_TIMEOUT_MILLIS
ReadTimeoutHandler
因为我是对的? 最佳答案
如果您使用 WebFlux 和 Netty,则 httpClient
应该是 Netty httpClient
.你去那里看过? https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html
无论出于何种原因远程服务器,都将使用此 timeOut。
reactor.netty.http.client.HttpClient#secure(
):如果没有另外配置,Netty 将假设 10 秒超时
为了握手。如果要定义另一个超时,请使用
reactor.netty.tcp.sslHandshakeTimeout
https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html#secure--使用
ReadTimeoutHandler
您可以定义等待多长时间通过连接接收数据。这可能是例如
一次性完成整个响应,如果响应是流式传输的,则为字节。
responseTimeout
在 httpClient
做同样的事情。两者都创建了 TcpClient
与给定的 timeOut
环境。 ReadTimeoutHandler 的好处是您可以获得一个回调,该回调会在发生超时时执行您定义的逻辑。关于Netty HttpClient - 响应超时与读取超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64179173/