SpringCloud Alibaba Feign 核心原理以及优化方法

1、Feign介绍

        Feign是一个http请求调用的轻量级框架,以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign 并且集成了Ribbon实现客户端负载均衡调用。

作用:封装了Http调用流程,更适合面向接口化的编程习惯

2、Feign工作原理

Feign远程调用流程图

整个流程步骤:

  1. 开始调用方法。
  2. 由动态代理Target接管方法运行。
  3. Contract根据注解,取得MethodHandler列表。
  4. 执行Request相关的MethodHandler。
  5. 由Encoder包装Request,执行相应的装饰器,记录日志。
  6. 基于Client发起请求。取得请求Response,由Decoder解码。
  7. 执行Response相关的MethodHandler。
  8. 经由代理类返回最终结果。

3、Feign优化

(1)GZIP压缩

        gzip是一种数据格式,采用deflate算法压缩数据。当Gzip压缩到一个纯文本数据时,可以减少70%以上的数据大小。

gzip作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。

只配置Feign请求-应答的GZIP压缩

# feign gzip
# 局部配置。只配置feign技术相关的http请求-应答中的gzip压缩。
# 配置的是application client和application service之间通讯是否使用gzip做数据压缩。
# 和浏览器到application client之间的通讯无关。
# 开启feign请求时的压缩, application client -> application service
feign.compression.request.enabled=true
# 开启feign技术响应时的压缩,  application service -> application client
feign.compression.response.enabled=true
# 设置可以压缩的请求/响应的类型。
feign.compression.request.mime-types=text/xml,application/xml,application/json
# 当请求的数据容量达到多少的时候,使用压缩。默认是2048字节。
feign.compression.request.min-request-size=512

配置全局的GZIP压缩

# spring boot gzip
# 开启spring boot中的gzip压缩。就是针对和当前应用所有相关的http请求-应答的gzip压缩。
server.compression.enabled=true
# 哪些客户端发出的请求不压缩,默认是不限制
server.compression.excluded-user-agents=gozilla,traviata
# 配置想压缩的请求/应答数据类型,默认是 text/html,text/xml,text/plain
server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
# 执行压缩的阈值,默认为2048
server.compression.min-response-size=512

(2)替换为HttpClient客户端(使用HTTP连接池提供性能)

Feign的HTTP客户端支持3种框架,分别是:HttpURLConnection、HttpClient、OKHttp。

(Feign中默认使用HttpURLConnection)

  • HttpURLConnection是JDK自带的HTTP客户端技术,并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,如果有可用的其他方案,也没有必要自己去管理连接对象。
  • Apache提供的HttpClient框架相比传统JDK自带的HttpURLConnection,它封装了访问http的请求头,参数,内容体,响应等等;它不仅使客户端发送HTTP请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性;另外高并发大量的请求网络的时候,还是用“HTTP连接池”提升吞吐量
  • OKHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架。OKHttp拥有共享Socket,减少对服务器的请求次数,通过连接池,减少了请求延迟等技术特点

本案例中,通过替换Feign底层的HTTP客户端实现为HttpClient,来提升Feign的通讯性能。

修改全局配置文件:开启feign技术对底层httpclient的依赖。 切换底层实现技术。

feign.httpclient.enabled=true

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo|Java engine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值