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