【发布时间】:2020-03-17 11:42:18
【问题描述】:
我有一个非常基本的 spring boot 2.2.4 应用程序,它使用带有阻塞调用的 webclient 查询下游系统。我没有对网络客户端进行任何配置(设置超时等),只是“开箱即用”地使用它。
我发现 webclient 调用的响应时间要么低于 3 秒,要么正好 45 秒,我觉得很奇怪。为什么如果响应很慢,它总是 45 秒?
我能找到的关于 45 秒的唯一参考来自 Reactor Netty 文档:
4.6。连接池
默认情况下,TCP 客户端使用“固定”连接池,最大通道数为 500,获取超时时间为 45s。这意味着如果有人尝试获取一个通道但池中没有一个通道,则该实现会创建一个新通道。当达到池中通道的最大数量时,将延迟新尝试获取通道,直到通道再次返回池中。该实现对池中的通道使用 FIFO 顺序。默认情况下,池中的通道没有指定空闲时间。
对于为什么我的慢速网络客户端调用总是需要 45 秒才能完成,有人有什么建议吗?
【问题讨论】:
-
一个调用需要45s,是成功还是失败?如果它失败了,那就是错误?
-
另外,请尝试使用 IP 地址而不是域名进行连接。这将消除或表明与 DNS 相关的可能问题
-
@Matt,它成功了,永远不会失败。
标签: java spring-boot reactor-netty spring-webclient