目录
SpringCloud开发实战(一):搭建SpringCloud框架
SpringCloud开发实战(二):通过RestTemplate实现远程调用
SpringCloud开发实战(三):集成Eureka注册中心
SpringCloud开发实战(四):Feign远程调用
前言
我们在SpringCloud开发实战(四):Feign远程调用 这篇文章中使用Feign来替代RestTemplate实现远程调用。但是默认的Feign其实还有可以优化的空间。
因为Feign底层发起Http请求,实际上是依赖于其他的框架来实现的。其底层客户端实现包括:
- URLConnection:默认实现,不支持连接池
- Apache HttpClient :支持连接池
- OKHttp:支持连接池
因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。这里我们用Apache的HttpClient来演示。
一、引入依赖
我们在order-service的pom文件中引入Apache的HttpClient依赖:
java
<!--httpClient的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
二、配置连接池
我们在order-service的application.yml中添加配置:
java
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
三、测试
接下来,我们在FeignClientFactoryBean中的loadBalance方法中打断点,鼠标移动在openfeign上,然后按Ctrl+鼠标左键
然后会自动跳到openfeign包,然后我们找到FeignClientFactoryBean,双击打开
接下来,在FeignClientFactoryBean中的loadBalance方法中打断点:
接着我们通过Debug方式启动order-service服务,然后调用接口,可以看到这里的client,底层就是Apache HttpClient:
四、总结
最后我们来总结一下Feign的优化:
-
日志级别尽量用basic
-
使用HttpClient或OKHttp代替URLConnection
-
引入feign-httpClient依赖
-
配置文件开启httpClient功能,设置连接池参数
-