java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Cloud OpenFeign

分享Spring Cloud OpenFeign 的五个优化技巧

作者:​ JAVA小也   ​

这篇文章主要分享的是Spring Cloud OpenFeign 的五个优化技巧,OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,更多相关内容需要的小伙伴可以参考一下

前言:

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Feign(Netflix Feign),同时它也是 Spring 官方的顶级开源项目。我们在日常的开发中使用它的频率也很高,而 OpenFeign 有一些实用的小技巧,配置之后可以让 OpenFeign 更好的运行,所以本文我们就来盘点一下(也欢迎各位老铁评论区留言补充)。

一、超时优化

OpenFeign 底层内置了 Ribbon 框架,并且使用了 Ribbon 的请求连接超时时间和请求处理超时时间作为其超时时间,而 Ribbon 默认的请求连接超时时间和请求处理超时时间都是 1s

如下源码所示:

所有当我们使用 OpenFeign 调用了服务接口超过 1s,就会出现以下错误:

因为 1s 确实太短了,因此我们需要手动设置 OpenFeign 的超时时间以保证它能正确的处理业务。

OpenFeign 的超时时间有以下两种更改方法:

1、设置Ribbon超时时间

在项目配置文件 application.yml 中添加以下配置:

ribbon:
ReadTimeout: 5000 # 请求连接的超时时间
ConnectionTimeout: 10000 # 请求处理的超时时间

2、设置OpenFeign超时时间

在项目配置文件 application.yml 中添加以下配置:

feign:
client:
 config:
   default: # 设置的全局超时时间
     connectTimeout: 2000 # 请求连接的超时时间
     readTimeout: 5000 # 请求处理的超时时间

推荐使用此方式来设置 OpenFeign 的超时时间,因为这样的(配置)语义更明确。

二、请求连接优化

OpenFeign 底层通信组件默认使用 JDK 自带的 URLConnection 对象进行 HTTP 请求的,因为没有使用连接池,所以性能不是很好。我们可以将 OpenFeign 的通讯组件,手动替换成像 Apache HttpClient 或 OKHttp 这样的专用通信组件,这些的专用通信组件自带连接池可以更好地对 HTTP 连接对象进行重用与管理,同时也能大大的提升 HTTP 请求的效率。接下来我以 Apache HttpClient 为例,演示一下专用通讯组件的使用。

1、引入Apache HttpClient依赖

在项目的依赖管理文件 pom.xml 中添加以下配置:

<!-- 添加 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>

2、开启Apache HttpClient使用

启动 Apache HttpClient 组件,在项目配置文件 application.yml 中添加以下配置,:

feign:
client:
 httpclient: # 开启 HttpClient
   enabled: true

验证 Apache HttpClient 配置是否生效,可以在 feign.SynchronousMethodHandler#executeAndDecode 方法上打断点就可以看到了,

如下图所示:

三、数据压缩

OpenFeign 默认不会开启数据压缩功能,但我们可以手动的开启它的 Gzip 压缩功能,这样可以极大的提高宽带利用率和加速数据的传输速度,在项目配置文件 application.yml 中添加以下配置:

feign:
compression:
 request:
   enabled: true # 开启请求数据的压缩功能
   mime-types: text/xml,application/xml, application/json # 压缩类型
   min-request-size: 1024 # 最小压缩值标准,当数据大于 1024 才会进行压缩
 response:
   enabled: true # 开启响应数据压缩功能

PS:如果服务消费端的 CPU 资源比较紧张的话,建议不要开启数据的压缩功能,因为数据压缩和解压都需要消耗 CPU 的资源,这样反而会给 CPU 增加了额外的负担,也会导致系统性能降低。

四、负载均衡优化

OpenFeign 底层使用的是 Ribbon 做负载均衡的,查看源码我们可以看到它默认的负载均衡策略是轮询策略,

如下图所示:

然而除了轮询策略之外,我们还有其他 6 种内置的负载均衡策略可以选择,这些负载均衡策略如下:

出于性能方面的考虑,我们可以选择用权重策略或区域敏感策略来替代轮询策略,因为这样的执行效率最高。

五、日志级别优化

OpenFeign 提供了日志增强功能,它的日志级别有以下几个:

我们可以通过配置文件来设置日志级别,配置信息如下:

logging:
  level:
    cn.myjszl.service: debug

其中 cn.myjszl.service 为 OpenFeign 接口所在的包名。虽然 OpenFeign 默认是不输出任何日志,但在开发阶段可能会被修改,因此在生产环境中,我们应仔细检查并设置合理的日志级别,以提高 OpenFeign 的运行效率。

总结

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,在生产环境中我们可以通过以下配置来优化

OpenFeign 的运行:

到此这篇关于Spring Cloud OpenFeign 的五个优化技巧的文章就介绍到这了,更多相关Spring Cloud OpenFeign 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文