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

标签 netty spring-webflux reactor-netty

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

  • 响应超时: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 响应式(Reactive)调用电话 WebClient , 使用 HttpClient引擎盖下:
  • 建立到远程服务器的连接 >>> 在这里我们利用 ChannelOption.CONNECT_TIMEOUT_MILLIS
  • TLS 握手 >>> 在这里我们利用 ReadTimeoutHandler因为我是对的?
  • 发送请求
  • ...等等...
  • 接收响应 >>> 此处“超时”优先:响应/读取?
  • 最佳答案

    如果您使用 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您可以定义等待多长时间
    通过连接接收数据。这可能是例如
    一次性完成整个响应,如果响应是流式传输的,则为字节。 responseTimeouthttpClient做同样的事情。两者都创建了 TcpClient与给定的 timeOut环境。 ReadTimeoutHandler 的好处是您可以获得一个回调,该回调会在发生超时时执行您定义的逻辑。
  • 关于Netty HttpClient - 响应超时与读取超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64179173/

    相关文章:

    multithreading - Netty:每个请求一个线程

    java - 当尝试使用 react 数据时,我得到了 bean 类 [reactor.core.publisher.MonoOnAssembly] 的无效属性 'id'

    java - 在返回通量数据库实体之前运行异步任务

    java - Spring 5 webflux 如何为现有 Webclient 设置超时

    spring-boot - 如何使用 Netty 扩展 Spring react 堆

    java - 如何在 Citrus 中测试套接字服务器?

    java - 客户端 ECC SSL 证书包含 "unknown named curve"

    spring - 如何在 Spring 5 WebFlux WebClient 中设置超时

    java - 什么时候在 keepalive 的情况下调用 channelInactive?

    java - Webflux WebClient java.lang.NullPointerException