主要内容
Openfeign简介
Openfeign的请求参数处理
Openfeign的性能优化
配置Openfeign负载均衡请求超时时间
学习目标
Spring Cloud Openfeign
一、 Openfeign简介
Openfeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。
Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Openfeign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法远程调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。
1 使用Feign技术开发时的应用部署结构
二、 Openfeign的请求参数处理
创建Eureka Client工程
1.1 POM依赖
2 创建Service API服务标准Module
3 开发服务标准 - Service API
3.1 POM依赖
3.2 测试自定义参数类型
3.3 服务接口定义
4 创建Application Service服务提供者Module
5 开发服务提供者 - Application Servic
5.1 POM依赖
5.2 服务标准实现
5.3 配置文件application.yml
5.4 启动类
6 创建Application Client服务消费者Module
7 开发服务消费者 - Application Client
7.1 POM依赖
7.2 本地服务接口
7.3 控制器开发
7.4 配置文件application.yml
7.5 启动类
8 参数处理简单总结
在Openfeign处理远程服务调用时,传递参数是通过HTTP协议传递的,参数存在的位置是请求头或请求体中。请求头传递的参数必须依赖@RequestParam注解来处理请求参数,请求体传递的参数必须依赖@RequestBody注解来处理请求参数。
三、 Openfeign的性能优化
1 GZIP简介
gzip介绍:gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。
gzip能力:当Gzip压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据大小。
gzip作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。
HTTP协议中的压缩传输简介
第一:客户端向服务器请求头中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示,客户端支持的压缩格式(gzip或者deflate),如果不发送该消息头,服务器是不会压缩的。
第二:服务端在收到请求之后,如果发现请求头中含有Accept-Encoding字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带Content-Encoding:gzip消息头,表示响应报文是根据该格式压缩过的。
第三:客户端接收到响应之后,先判断是否有Content-Encoding消息头,如果有,按该格式解压报文。否则按正常报文处理。
3 在Openfeign技术中应用GZIP压缩
在Spring Cloud微服务体系中,一次请求的完整流程如下:
在整体流程中,如果使用GZIP压缩来传输数据,涉及到两次请求-应答。而这两次请求-应答的连接点是Application Client,那么我们需要在Application Client中配置开启GZIP压缩,来实现压缩数据传输。
3.1 只配置Openfeign请求-应答中的GZIP压缩
只开启Feign请求-应答过程中的GZIP,也就是浏览器-Application Client之间的请求应答不开启GZIP压缩。
在全局配置文件中,使用下述配置来实现Openfeign请求-应答的GZIP压缩
3.2 配置全局GZIP压缩
在全局配置文件中配置下述内容,来开启所有请求-应答中的GZIP压缩,这里使用的是Spring Boot中的GZIP技术。在Spring Boot中已经集成了GZIP压缩技术,并对所有的请求-应答实现GZIP数据压缩。工程中已经依赖了Spring Boot技术,所以在配置文件中可以开启Spring Boot中的GZIP压缩技术,对完整流程中所有相关的请求-应答开启GZIP压缩。
四、 配置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