主要内容

Openfeign简介

Openfeign的请求参数处理

Openfeign的性能优化

配置Openfeign负载均衡请求超时时间

学习目标


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时


Spring Cloud Openfeign

一、 Openfeign简介

Openfeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。

Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Openfeign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法远程调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

1 使用Feign技术开发时的应用部署结构


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_02


二、 Openfeign的请求参数处理

创建Eureka Client工程


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_03


1.1 POM依赖


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_04


2 创建Service API服务标准Module


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_05


3 开发服务标准 - Service API

3.1 POM依赖


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_06


3.2 测试自定义参数类型


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_07


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_08


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_09


3.3 服务接口定义


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_10


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_11


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_12


4 创建Application Service服务提供者Module


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_13


5 开发服务提供者 - Application Servic

5.1 POM依赖


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_14


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_15


5.2 服务标准实现


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_16


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_17


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_18


5.3 配置文件application.yml


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_19


5.4 启动类


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_20


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_21


6 创建Application Client服务消费者Module


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_22


7 开发服务消费者 - Application Client

7.1 POM依赖


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_23


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_24


7.2 本地服务接口


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_25


7.3 控制器开发


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_26


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_27


7.4 配置文件application.yml


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_28


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_29


7.5 启动类


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_30


8 参数处理简单总结

在Openfeign处理远程服务调用时,传递参数是通过HTTP协议传递的,参数存在的位置是请求头或请求体中。请求头传递的参数必须依赖@RequestParam注解来处理请求参数,请求体传递的参数必须依赖@RequestBody注解来处理请求参数。

三、 Openfeign的性能优化

1 GZIP简介

gzip介绍:gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。

gzip能力:当Gzip压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据大小。

gzip作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。

HTTP协议中的压缩传输简介


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_31


第一:客户端向服务器请求头中带有:Accept-Encoding:gzip, deflate 字段,向服务器表示,客户端支持的压缩格式(gzip或者deflate),如果不发送该消息头,服务器是不会压缩的。

第二:服务端在收到请求之后,如果发现请求头中含有Accept-Encoding字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带Content-Encoding:gzip消息头,表示响应报文是根据该格式压缩过的。

第三:客户端接收到响应之后,先判断是否有Content-Encoding消息头,如果有,按该格式解压报文。否则按正常报文处理。

3 在Openfeign技术中应用GZIP压缩

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


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_32


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

3.1 只配置Openfeign请求-应答中的GZIP压缩

只开启Feign请求-应答过程中的GZIP,也就是浏览器-Application Client之间的请求应答不开启GZIP压缩。

在全局配置文件中,使用下述配置来实现Openfeign请求-应答的GZIP压缩


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_33


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 超时_34


3.2 配置全局GZIP压缩

在全局配置文件中配置下述内容,来开启所有请求-应答中的GZIP压缩,这里使用的是Spring Boot中的GZIP技术。在Spring Boot中已经集成了GZIP压缩技术,并对所有的请求-应答实现GZIP数据压缩。工程中已经依赖了Spring Boot技术,所以在配置文件中可以开启Spring Boot中的GZIP压缩技术,对完整流程中所有相关的请求-应答开启GZIP压缩。


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_35


微服务升级导致feign调用超时 feign设置服务调用超时时间_feign 第一次调用超时_36


四、 配置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