Java 网络客户端响应时间少于3秒或45秒
我有一个非常基本的SpringBoot2.2.4应用程序,它使用webclient和阻塞调用查询下游系统。我没有对webclient进行任何配置(设置超时等),只是“开箱即用” 我发现webclient调用的响应时间要么低于3秒,要么正好是45秒,这让我感到非常奇怪。为什么如果响应缓慢,它总是45秒 我能找到的关于45秒的唯一参考资料来自反应堆Netty文档: 4.6。连接池 默认情况下,TCP客户端使用一个“固定”连接池,最大通道数为500,采集超时为45秒。这意味着,如果有人试图获取通道,但池中没有通道,则实现将创建一个新通道。当达到池中通道的最大数量时,获取通道的新尝试将延迟,直到通道再次返回到池中。该实现对池中的通道使用FIFO顺序。默认情况下,没有为池中的通道指定空闲时间Java 网络客户端响应时间少于3秒或45秒,java,spring-boot,reactor-netty,spring-webclient,Java,Spring Boot,Reactor Netty,Spring Webclient,我有一个非常基本的SpringBoot2.2.4应用程序,它使用webclient和阻塞调用查询下游系统。我没有对webclient进行任何配置(设置超时等),只是“开箱即用” 我发现webclient调用的响应时间要么低于3秒,要么正好是45秒,这让我感到非常奇怪。为什么如果响应缓慢,它总是45秒 我能找到的关于45秒的唯一参考资料来自反应堆Netty文档: 4.6。连接池 默认情况下,TCP客户端使用一个“固定”连接池,最大通道数为500,采集超时为45秒。这意味着,如果有人试图获取通道,但
有人对为什么我的慢速网络客户端呼叫总是需要45秒才能完成有任何建议吗?这是因为固定池大小为500。如果现有请求当前正在使用所有这些连接(通道),则新的连接请求将排队,直到500个连接中的一个空闲。如果WebClient无法在45秒内获取新请求的连接(因为所有500个通道仍被现有请求阻塞),它将失败,并出现AcquireTimeout异常。我假设在3秒前完成的是成功的,而45秒的是失败的。根据应用程序的吞吐量,您可以相应地调整池大小。这是因为固定池大小为500。如果现有请求当前正在使用所有这些连接(通道),则新的连接请求将排队,直到500个连接中的一个空闲。如果WebClient无法在45秒内获取新请求的连接(因为所有500个通道仍被现有请求阻塞),它将失败,并出现AcquireTimeout异常。我假设在3秒前完成的是成功的,而45秒的是失败的。根据应用程序的吞吐量,您可以相应地调整池大小。过去,当我在成功连接上看到类似这样的延迟时,其原因如下:
查看此处了解更多信息:在过去,当我在成功连接上看到这样的延迟时,其原因如下:
查看此处了解更多信息:我认为这与这个棘手的问题有关: 我现在先看一下
谢谢你的回复 我认为这与这个棘手的问题有关: 我现在先看一下
谢谢你的回复 当通话需要45秒时,是成功还是失败?如果失败,那就是错误?另外,请尝试使用IP地址而不是域名连接。这将消除或指示与以下内容相关的可能问题:DNS@Matt,它成功了,从不失败。当一个呼叫需要45秒时,它成功了还是失败了?如果失败,那就是错误?另外,请尝试使用IP地址而不是域名连接。这将消除或指示与以下内容相关的可能问题:DNS@Matt,它成功了,从来没有失败过。45秒也成功了-没有失败。45秒也成功了-没有失败。