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响应式WebClient
进行呼叫,该响应式在后台使用HttpClient
:
ChannelOption.CONNECT_TIMEOUT_MILLIS
ReadTimeoutHandler
? 答案 0 :(得分:1)
如果使用WebFlux和Netty,则httpClient
应该是Netty httpClient
。你在那里看看吗? https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html
连接超时->如果您无法连接到 远程服务器,无论出于何种原因,都将使用此timeOut。
TLS握手,请检查: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的好处在于,您将获得一个执行超时时定义的逻辑的回调。
答案 1 :(得分:1)
如@ violeta-georgieva的评论中建议的那样> Netty HttpClient - response timeout vs. read timeout,应使用“ responseTimeout
”。