微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Netty HttpClient-响应超时与读取超时

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. 接收响应>>>,其中“超时”优先于此:响应/读取?

解决方法

如果使用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的好处在于,您将获得一个执行超时时定义的逻辑的回调。

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。