2025年6月6日 星期五 乙巳(蛇)年 三月初十 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Spring Boot

SpringBoot内嵌Tomcat的坑

时间:03-04来源:作者:点击数:19

众所周知,SpringCloud集成的Feign通过使用ApacheHttpClient,是可以支持长连接的。

但是我们测试却发现,长连接会被频繁的关闭。

调查发现,关闭连接是tomcat主动发起的,也就是说,ApacheHttpClient发起了长连接,但是Tomcat却把它关闭了。

Tomcat关闭长连接的条件有2个:

  • 单个连接的空闲时间超过60秒
  • 单个连接处理的请求数量超过100个

至少在SpringCloud H版,官方并没有提供参数来修改这两个值,所以只能自己想办法。幸好SpringCloud提供了WebServerFactoryCustomizer接口。

  • public class MyWebCustomizer implements WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory> {
  • @Value("${tomcat.keepalivetimeout}")
  • private Integer keepAliveTimeout; //空闲等待时间
  • @Value("${tomcat.maxKeepAliveRequests}")
  • private Integer maxKeepAliveRequests; //最大处理请求数
  • @Override
  • public void customize(ConfigurableTomcatWebServerFactory factory){
  • factory.addConnectorCustomizers((connector) -> {
  • ProtocolHandler handler = connector.getProtocolHandler();
  • if(handler instanceof AbstractHttp11Protocol){
  • AbstractHttp11Protocol<?> protocol = (AbstractHttp11Protocol)handler;
  • protocol.setKeepAliveTimeout(keepAliveTimeout);
  • protocol.setMaxKeepAliveRequests(maxKeepAliveRequests);
  • }
  • }
  • }
  • }

当然上述类需要以Bean的形式注入。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐