【问题标题】:Spring Webflux Webclient set Connection keepAlive timeSpring Webflux Webclient设置Connection keepAlive时间
【发布时间】:2019-04-13 07:24:09
【问题描述】:

刚开始使用Spring Webflux Webclient,只是想知道Http Connection的默认KeepAlive时间是多少?有没有办法增加keepAlive时间?在我们的 Rest Service 中,我们可能每五分钟收到一个请求,该请求需要很长时间来处理。它需要 500 秒 - 10 秒之间的时间。但是在负载测试中,如果我发送频繁的请求,处理时间小于 250 毫秒。

【问题讨论】:

    标签: spring-boot spring-webflux reactor-netty


    【解决方案1】:

    Spring WebFlux WebClient 是一个封装了实际 HTTP 库的 HTTP 客户端 API - 因此,连接管理、超时等配置直接在库级别进行配置,并且行为可能会根据所选库而改变。

    WebClient 的默认库是Reactor Netty

    许多 HTTP 客户端(Reactor Netty 就是这种情况)在连接池中维护 HTTP 连接以重用它们。客户端通常会获取到远程主机的新连接,使用它来发送/接收信息,然后将其放回连接池中。这非常有用,因为有时获取新连接的成本可能很高。在你的情况下,这似乎真的很昂贵。

    HTTP 客户端将那些未使用的连接留在池中,但是 keepAlive 时间呢?

    大多数客户端尽可能长时间地将这些连接留在池中,并在获取它们之前对其进行测试以查看它们是否仍然有效,或者异步侦听服务器事件以将它们从池中删除(我相信 Reactor Netty 会这样做)。因此,最终,服务器处于控制之中,并决定在连接处于非活动状态时何时关闭连接。

    现在您的问题描述可能表明连接到该远程主机的成本非常高,但也可能是远程主机需要很长时间才能响应您的请求(例如,它可能在空缓存上运行并且需要计算很多东西)。

    【讨论】:

    • 感谢您的 cmets Brian,当使用远程服务进行检查时,他们发现每 5 分钟一个请求的延迟小于 250 毫秒。我会更多地研究连接池。
    猜你喜欢
    • 2018-08-06
    • 2018-06-14
    • 2018-02-24
    • 2018-05-09
    • 2019-11-23
    • 2020-07-12
    • 2022-09-23
    • 2019-08-22
    • 2018-08-18
    相关资源
    最近更新 更多