download:SpringBoot+Uniapp实战开发全新仿抖音短视频App
Spring Cloud OpenFeign近程调用性能优化
分享一下OpenFeign几个方面优化的小技巧,次要分为以下几点:
请求通信连接优化
超时优化
负载平衡
数据压缩
日志级别优化
一、请求通信连接优化
OpenFeign底层通信组件默认使用JDK自带的URLConnection对象进行HTTP请求的,因为没有使用连接池,所以性能不是很好。咱们可能将OpenFeign的通信组件,手动替换成像Apache HttpClient或OKHttp这样的专用通信组件,这些的专用通信组件自带连接池可能更好地对 HTTP 连接对象进行重用与治理,同时也能大大的晋升 HTTP 请求的效率。接下来我以Apache HttpClient为例,演示一下专用通信组件的替换使用。
1.1 增加pom依赖
<!-- 增加 openfeign 框架依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 增加 httpclient 框架依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
复制代码
1.2 开启Apache HttpClient使用
启动Apache HttpClient,在我的项目配置文件application.yml中增加以下配置:
spring:
cloud:
feign: client: httpclient: # 默认Feign使用的是JDK自带的URLConnection进行Http请求的,手动替换成Apache HttpClient专用的通信组件 enabled: true
复制代码
考据Apache HttpClient配置是否失效,通过debug调试,在feign.SynchronousMethodHandler#executeAndDecode()方法上打端断点,通过发动一个近程调用请求,
二、Ribbon超时优化
OpenFeign和Feign底层都内置了Ribbon负载平衡组件,在导入OpenFeign依赖后无需顺便导入Ribbon依赖。OpenFeign也因此使用了Ribbon的请求连接超时工夫和请求处理超时工夫作为其超时工夫,而Ribbon默认的请求连接超时工夫和请求处理超时工夫都是1s,
2.1 设置OpenFeign调用超时工夫
在我的项目配置文件application.yml中增加配置:
近程调用优化
feign:
client:
httpclient: # 默认Feign使用的是JDK自带的URLConnection进行Http请求的,手动替换成Apache HttpClient专用的通信组件 enabled: trueconfig: default: # 设置的全局超时工夫 connectTimeout: 3000 # 请求连接的超时工夫 readTimeout: 5000 # 请求处理的超时工夫
复制代码
2.2 设置Ribbon超时工夫
ribbon:
ConnectionTimeout: 3000 # 请求连接的超时工夫
ReadTimeout: 5000 # 请求处理的超时工夫
复制代码
通过debug的形式考据以下设置的超时工夫是否失效,很显著配置已经失效,次要看org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingProperties()方法,
OpenFeign是Spring官网推出的一种申明式服务调用和负载平衡组件,在生产环境中咱们可能通过以下配置来优化OpenFeign的运行:
修改OpenFeign的超时工夫,让OpenFeign能够正确的处理业务;
通过配置专用的通信组件Apache HttpClient或OKHttp,让OpenFeign可能通过线程池更好地对 HTTP连接对象进行重用和治理,以提高其性能;
开启数据压缩功能,可能提高宽带应用率和减速数据传输速度;
使用合适的负载平衡策略来替换默认的轮询负载平衡策略,已获得更好的执行效率;
查看生成环境中OpenFeign的日志级别,抉择合适的日志输入级别,防止有效的日志输入。