背景:
默认情况下,feign通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图,源码详见feign.Client.Default),这种情况下,由于缺乏连接池的支持,在达到一定流量的后服务肯定会出问题
方案:
默认配置显然不足以支撑生产环境的服务,因此我们需要使用更加完备的方案。下面我们以HttpClient作为事例,来看一下怎样改变feign的底层http方案
1.pom文件增加feign-httpclient的依赖(请注意与feign-core的版本保持一致)
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>9.4.0</version>
</dependency>
2.application.properties配置激活
feign.httpclient.enabled=true
3.添加HttpClient配置(spring bean),请根据实际情况配置相关参数(例如最大连接数、超时时间等)
通过以上3步后,HttpClient即可作为feign的底层http方案,源码如下图(详见:org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration)