刚开始使用 Spring Webflux Webclient,只是想知道 Http Connection 的默认 KeepAlive 时间是多少?有没有办法增加keepAlive时间?在我们的 Rest Service 中,我们可能每五分钟收到一个请求,该请求需要很长时间来处理。它需要 500 秒 - 10 秒之间的时间。但是在负载测试中,如果我发送频繁的请求,处理时间小于 250 毫秒。
问问题
7436 次
1 回答
4
Spring WebFlux WebClient 是一个封装了实际 HTTP 库的 HTTP 客户端 API - 因此连接管理、超时等配置直接在库级别进行配置,并且行为可能会根据所选库而改变。
WebClient 的默认库是Reactor Netty。
许多 HTTP 客户端(Reactor Netty 就是这种情况)在连接池中维护 HTTP 连接以重用它们。客户端通常会获取到远程主机的新连接,使用它来发送/接收信息,然后将其放回连接池中。这非常有用,因为有时获取新连接的成本可能很高。在你的情况下,这似乎真的很昂贵。
HTTP 客户端将那些未使用的连接留在池中,但是 keepAlive 时间呢?
大多数客户端尽可能长时间地将这些连接留在池中并在获取它们之前对其进行测试以查看它们是否仍然有效或异步侦听服务器事件以将它们从池中删除(我相信 Reactor Netty 会这样做)。因此,最终,服务器处于控制之中,并决定在连接处于非活动状态时何时关闭连接。
现在您的问题描述可能表明连接到该远程主机的成本非常高,但也可能是远程主机需要很长时间才能响应您的请求(例如,它可能在空缓存上运行并且需要计算很多东西)。
于 2018-11-09T20:07:55.963 回答