![d9106bdadb29622689f054579b061a4f.png](https://img-blog.csdnimg.cn/img_convert/d9106bdadb29622689f054579b061a4f.png)
主要内容
Openfeign简介
Openfeign的请求参数处理
Openfeign的性能优化
配置Openfeign负载均衡请求超时时间
学习目标
![153d8d3b3ea64adcb07b65cdfde94847.png](https://img-blog.csdnimg.cn/img_convert/153d8d3b3ea64adcb07b65cdfde94847.png)
Spring Cloud Openfeign
一、 Openfeign简介
Openfeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。
Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Openfeign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法远程调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。
1 使用Feign技术开发时的应用部署结构
![392eb6baf243fde95b4faeeea506303d.png](https://img-blog.csdnimg.cn/img_convert/392eb6baf243fde95b4faeeea506303d.png)
二、 Openfeign的请求参数处理
创建Eureka Client工程
![e90981443c9c283cef142fe182a9f432.png](https://img-blog.csdnimg.cn/img_convert/e90981443c9c283cef142fe182a9f432.png)
1.1 POM依赖
![801363dedea1883b93059db3395c1078.png](https://img-blog.csdnimg.cn/img_convert/801363dedea1883b93059db3395c1078.png)
2 创建Service API服务标准Module
![8c19ab5c9d63887020cf054155c5f4c2.png](https://img-blog.csdnimg.cn/img_convert/8c19ab5c9d63887020cf054155c5f4c2.png)
3 开发服务标准 - Service API
3.1 POM依赖
![7fcc3dfa37f3b10546a37999db277586.png](https://img-blog.csdnimg.cn/img_convert/7fcc3dfa37f3b10546a37999db277586.png)
3.2 测试自定义参数类型
![6ce61827b9095158da2ba105c4061544.png](https://img-blog.csdnimg.cn/img_convert/6ce61827b9095158da2ba105c4061544.png)
![69ac6600439ae429cface67121a8ae2f.png](https://img-blog.csdnimg.cn/img_convert/69ac6600439ae429cface67121a8ae2f.png)
![81c91580566c16bf2a3a96780e87e632.png](https://img-blog.csdnimg.cn/img_convert/81c91580566c16bf2a3a96780e87e632.png)
3.3 服务接口定义
![ce72a63d4c3c2e85a220ebf6de5b5bbc.png](https://img-blog.csdnimg.cn/img_convert/ce72a63d4c3c2e85a220ebf6de5b5bbc.png)
![cd6c827650f060dae4655be5250be217.png](https://img-blog.csdnimg.cn/img_convert/cd6c827650f060dae4655be5250be217.png)
![7c3e5fd835c364d21e07d84beebcceb4.png](https://img-blog.csdnimg.cn/img_convert/7c3e5fd835c364d21e07d84beebcceb4.png)
4 创建Application Service服务提供者Module
![af6c6cca3fdb3ac9551ef4d8d99e313b.png](https://img-blog.csdnimg.cn/img_convert/af6c6cca3fdb3ac9551ef4d8d99e313b.png)
5 开发服务提供者 - Application Servic
5.1 POM依赖
![0b28d32e9cf94b185ae81417fc7e6151.png](https://img-blog.csdnimg.cn/img_convert/0b28d32e9cf94b185ae81417fc7e6151.png)
![0a3d544fac98c958ef5e25a9c578f3fa.png](https://img-blog.csdnimg.cn/img_convert/0a3d544fac98c958ef5e25a9c578f3fa.png)
5.2 服务标准实现
![06552d33da338d51ffb226a3e969ea5c.png](https://img-blog.csdnimg.cn/img_convert/06552d33da338d51ffb226a3e969ea5c.png)
![708da47a3ccebc95c0496d15d74e7d85.png](https://img-blog.csdnimg.cn/img_convert/708da47a3ccebc95c0496d15d74e7d85.png)
![e3cfab4779c93f0feb03d112c74d53e7.png](https://img-blog.csdnimg.cn/img_convert/e3cfab4779c93f0feb03d112c74d53e7.png)
5.3 配置文件application.yml
![f0d8d4988477cdefd232258f9c378a3d.png](https://img-blog.csdnimg.cn/img_convert/f0d8d4988477cdefd232258f9c378a3d.png)
5.4 启动类
![872a8259d6f881db0518cbd7c560f4f2.png](https://img-blog.csdnimg.cn/img_convert/872a8259d6f881db0518cbd7c560f4f2.png)
![4c7f6225ec186d8bd1a8ef05f8424e0d.png](https://img-blog.csdnimg.cn/img_convert/4c7f6225ec186d8bd1a8ef05f8424e0d.png)
6 创建Application Client服务消费者Module
![808616d3d6b7ec94a5fdabebbc533006.png](https://img-blog.csdnimg.cn/img_convert/808616d3d6b7ec94a5fdabebbc533006.png)
7 开发服务消费者 - Application Client
7.1 POM依赖
![0f951c0fde20e6c4408def76a710c5a8.png](https://img-blog.csdnimg.cn/img_convert/0f951c0fde20e6c4408def76a710c5a8.png)
![2faaef768562d1eecf7fb2f7ee1dbb41.png](https://img-blog.csdnimg.cn/img_convert/2faaef768562d1eecf7fb2f7ee1dbb41.png)
7.2 本地服务接口
![be2a7be7b091e1f3ba0c78a45f0ac541.png](https://img-blog.csdnimg.cn/img_convert/be2a7be7b091e1f3ba0c78a45f0ac541.png)
7.3 控制器开发
![4294aeef754cf2d5b5bf71cab89622bf.png](https://img-blog.csdnimg.cn/img_convert/4294aeef754cf2d5b5bf71cab89622bf.png)
![0d60259656dd7b07cb1408f5aa32acb4.png](https://img-blog.csdnimg.cn/img_convert/0d60259656dd7b07cb1408f5aa32acb4.png)
7.4 配置文件application.yml
![4109ba4a59a46950a177437e88468e03.png](https://img-blog.csdnimg.cn/img_convert/4109ba4a59a46950a177437e88468e03.png)
![01f8cc0bcdcb7ee02a38d165752f734c.png](https://img-blog.csdnimg.cn/img_convert/01f8cc0bcdcb7ee02a38d165752f734c.png)
7.5 启动类
![d33b32f89cebd4dadf3e960a82f16f7d.png](https://img-blog.csdnimg.cn/img_convert/d33b32f89cebd4dadf3e960a82f16f7d.png)
8 参数处理简单总结
在Openfeign处理远程服务调用时,传递参数是通过HTTP协议传递的,参数存在的位置是请求头或请求体中。请求头传递的参数必须依赖@RequestParam注解来处理请求参数,请求体传递的参数必须依赖@RequestBody注解来处理请求参数。
三、 Openfeign的性能优化
1 GZIP简介
gzip介绍:gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。
gzip能力:当Gzip压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据大小。
gzip作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。
HTTP协议中的压缩传输简介
![8e4d115a91c18bffd0a92c5f482e8c6e.png](https://img-blog.csdnimg.cn/img_convert/8e4d115a91c18bffd0a92c5f482e8c6e.png)
第一:客户端向服务器请求头中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示,客户端支持的压缩格式(gzip或者deflate),如果不发送该消息头,服务器是不会压缩的。
第二:服务端在收到请求之后,如果发现请求头中含有Accept-Encoding字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带Content-Encoding:gzip消息头,表示响应报文是根据该格式压缩过的。
第三:客户端接收到响应之后,先判断是否有Content-Encoding消息头,如果有,按该格式解压报文。否则按正常报文处理。
3 在Openfeign技术中应用GZIP压缩
在Spring Cloud微服务体系中,一次请求的完整流程如下:
![b519f8da4418c4b06f214bfc1e35b766.png](https://img-blog.csdnimg.cn/img_convert/b519f8da4418c4b06f214bfc1e35b766.png)
在整体流程中,如果使用GZIP压缩来传输数据,涉及到两次请求-应答。而这两次请求-应答的连接点是Application Client,那么我们需要在Application Client中配置开启GZIP压缩,来实现压缩数据传输。
3.1 只配置Openfeign请求-应答中的GZIP压缩
只开启Feign请求-应答过程中的GZIP,也就是浏览器-Application Client之间的请求应答不开启GZIP压缩。
在全局配置文件中,使用下述配置来实现Openfeign请求-应答的GZIP压缩
![0a145172b945d7d34dea99061d3c908f.png](https://img-blog.csdnimg.cn/img_convert/0a145172b945d7d34dea99061d3c908f.png)
![e481aff084f22a4db7f3c681ca2e5484.png](https://img-blog.csdnimg.cn/img_convert/e481aff084f22a4db7f3c681ca2e5484.png)
3.2 配置全局GZIP压缩
在全局配置文件中配置下述内容,来开启所有请求-应答中的GZIP压缩,这里使用的是Spring Boot中的GZIP技术。在Spring Boot中已经集成了GZIP压缩技术,并对所有的请求-应答实现GZIP数据压缩。工程中已经依赖了Spring Boot技术,所以在配置文件中可以开启Spring Boot中的GZIP压缩技术,对完整流程中所有相关的请求-应答开启GZIP压缩。
![affd9e05ffb906257ee1cbd41dde51e0.png](https://img-blog.csdnimg.cn/img_convert/affd9e05ffb906257ee1cbd41dde51e0.png)
![1e2b15365edf863ff1d0668931e50816.png](https://img-blog.csdnimg.cn/img_convert/1e2b15365edf863ff1d0668931e50816.png)
四、 配置Openfeign负载均衡请求超时时间
Openfeign技术底层是通过Ribbon技术实现的,那么在负载均衡和超时时间配置上,主要对Ribbon的配置。具体配置如下:
1 超时时间配置
在Application Client应用的配置文件上,增加下述配置:
ribbon:# 请求连接的超时时间,单位毫秒,默认的时间为1秒ConnectTimeout: 1000# 请求处理的超时时间,单位毫秒,默认的时间为1秒ReadTimeout: 1000
1 负载均衡配置
# 设置负载均衡策略。openfeign-service为设置负载均衡的服务名称
openfeign-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule