众所周知,SpringCloud集成的Feign经过使用ApacheHttpClient,是能够支持长链接的。
可是咱们测试却发现,长链接会被频繁的关闭。
调查发现,关闭链接是tomcat主动发起的,也就是说,ApacheHttpClient发起了长链接,可是Tomcat却把它关闭了。
Tomcat关闭长链接的条件有2个:java
至少在SpringCloud H版,官方并无提供参数来修改这两个值,因此只能本身想办法。幸亏SpringCloud提供了WebServerFactoryCustomizer接口。web
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的形式注入。tomcat