Netty HttpClient-响应超时与读取超时

时间:2020-10-02 23:06:25

标签: netty spring-webflux reactor-netty

HttpClient提供了各种要配置的“超时”,有两个让我感到困惑:

  • responseTimeout:This is time that takes to receive a response after sending a request
  • ReadTimeoutHandler:Raises a ReadTimeoutException when no data was read within a certain period of time

有人可以解释一下两者之间的主要区别吗?


一般情况-使用Spring响应式WebClient进行呼叫,该响应式在后台使用HttpClient

  1. 建立与远程服务器>>>的连接,我们在这里利用ChannelOption.CONNECT_TIMEOUT_MILLIS
  2. TLS握手>>>,这里我们正确地利用了ReadTimeoutHandler
  3. 发送请求
  4. ...等待...
  5. 接收响应>>>,其中“超时”优先于此:响应/读取?

2 个答案:

答案 0 :(得分:1)

如果使用WebFlux和Netty,则httpClient应该是Netty httpClient。你在那里看看吗? https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html

  1. 连接超时->如果您无法连接到 远程服务器,无论出于何种原因,都将使用此timeOut。

  2. 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--

  3. 现在已建立连接,您可以发送请求。通过 使用ReadTimeoutHandler,您可以定义等待多长时间 通过连接接收数据。例如,这可能是 完整响应,如果响应是流式传输,则为字节。 responseTimeout中的httpClient执行相同的操作。两者都使用给定的TcpClient设置创建timeOut。 ReadTimeoutHandler的好处在于,您将获得一个执行超时时定义的逻辑的回调。

答案 1 :(得分:1)

如@ violeta-georgieva的评论中建议的那样> Netty HttpClient - response timeout vs. read timeout,应使用“ responseTimeout”。

相关问题