OpenFeign简介

1. OpenFeign介绍

  1. **OpenFeign目前是Spring Cloud 二级子项目。**
  2. **OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。学习完OpenFeign后可以不实用RestTemplate进行调用。**
  3. **Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Feign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。**
  4. **使用OpenFeign时就好像在写控制器方法,OpenFeign都是写在接口中,在声明的方法上添加SpringMVC注解或声明的参数上添加SpringMVC注解就可以完成调用远程的控制器方法**

2. 使用OpenFeign时程序执行流程

  1. **OpenFeign代替之前的RestTemplate代码。也是写在Application Client中。把OpenFeign接口单独放在feign包中,表示服务调用层。当需要调用其他服务时,直接注入OpenFeign接口对象就可以像调用本地方法一样调用远程服务。**

整体流程说明:

  • ApplicationService 向Eureka Server 注册服务。
  • Application Client从Eureka Server中发现服务信息。
  • 在Application Client中调用OpenFeign接口中方法
  • Application Client中OpenFeign通过应用程序名调用Application Service

·4. 声明式服务调用OpenFeign - 图1

3. OpenFeign通讯优化

3.1 GZIP简介

  1. **gzip介绍:gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。**
  2. **gzip能力:当Gzip压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据大小。**
  3. **gzip作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。**

3.2 HTTP协议中关于压缩传输的规定(原理)

4. 声明式服务调用OpenFeign - 图2

  • 第一:客户端向服务器请求头中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示,客户端支持的压缩格式(gzip或者deflate),如果不发送该消息头,服务器是不会压缩的。
  • 第二:服务端在收到请求之后,如果发现请求头中含有Accept-Encoding字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带Content-Encoding:gzip消息头,表示响应报文是根据该格式压缩过的。
  • 第三:客户端接收到响应之后,先判断是否有Content-Encoding消息头,如果有,按该格式解压报文。否则按正常报文处理。

3.3 Feign技术中应用GZIP压缩

在Spring Cloud微服务体系中,一次请求的完整流程如下:

4. 声明式服务调用OpenFeign - 图3

  1. 在整体流程中,如果使用GZIP压缩来传输数据,涉及到两次请求-应答。而这两次请求-应答的连接点是Application Client,那么我们需要在Application Client中配置开启GZIP压缩,来实现压缩数据传输。

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

  1. # feign gzip
  2. # 开启请求GZIP
  3. feign.compression.request.enabled=true
  4. # 开启响应GZIP
  5. feign.compression.response.enabled=true
  6. # 设置支持GZIP压缩的MIME类型,即请求/响应类型。
  7. feign.compression.request.mime-types=text/xml,application/xml,application/json
  8. # 配置启动压缩数据的最小阀值,单位字节。默认为2048
  9. feign.compression.request.min-request-size=512