java架構(gòu)師高端課微服務(wù)_04_SpringCloud_Open_Feign
主要內(nèi)容
Openfeign簡(jiǎn)介
Openfeign的請(qǐng)求參數(shù)處理
Openfeign的性能優(yōu)化
配置Openfeign負(fù)載均衡請(qǐng)求超時(shí)時(shí)間
學(xué)習(xí)目標(biāo)

Spring Cloud?Openfeign
一、?Openfeign簡(jiǎn)介
Openfeign是一種聲明式、模板化的HTTP客戶端(僅在Application Client中使用)。聲明式調(diào)用是指,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,無(wú)需感知操作遠(yuǎn)程http請(qǐng)求。
Spring Cloud的聲明式調(diào)用, 可以做到使用 HTTP請(qǐng)求遠(yuǎn)程服務(wù)時(shí)能就像調(diào)用本地方法一樣的體驗(yàn),開發(fā)者完全感知不到這是遠(yuǎn)程方法,更感知不到這是個(gè)HTTP請(qǐng)求。Openfeign的應(yīng)用,讓Spring Cloud微服務(wù)調(diào)用像Dubbo一樣,Application Client直接通過(guò)接口方法遠(yuǎn)程調(diào)用Application Service,而不需要通過(guò)常規(guī)的RestTemplate構(gòu)造請(qǐng)求再解析返回?cái)?shù)據(jù)。它解決了讓開發(fā)者調(diào)用遠(yuǎn)程接口就跟調(diào)用本地方法一樣,無(wú)需關(guān)注與遠(yuǎn)程的交互細(xì)節(jié),更無(wú)需關(guān)注分布式環(huán)境開發(fā)。
1?使用Feign技術(shù)開發(fā)時(shí)的應(yīng)用部署結(jié)構(gòu)

二、?Openfeign的請(qǐng)求參數(shù)處理
創(chuàng)建Eureka Client工程

1.1?POM依賴

2??創(chuàng)建Service API服務(wù)標(biāo)準(zhǔn)Module

3??開發(fā)服務(wù)標(biāo)準(zhǔn) - Service API
3.1?POM依賴

3.2?測(cè)試自定義參數(shù)類型



3.3?服務(wù)接口定義



4??創(chuàng)建Application Service服務(wù)提供者M(jìn)odule

5?開發(fā)服務(wù)提供者 - Application Servic
5.1?POM依賴


5.2?服務(wù)標(biāo)準(zhǔn)實(shí)現(xiàn)



5.3?配置文件application.yml

5.4?啟動(dòng)類


6??創(chuàng)建Application Client服務(wù)消費(fèi)者M(jìn)odule

7??開發(fā)服務(wù)消費(fèi)者 - Application Client
7.1?POM依賴


7.2?本地服務(wù)接口

7.3?控制器開發(fā)


7.4?配置文件application.yml


7.5?啟動(dòng)類

8??參數(shù)處理簡(jiǎn)單總結(jié)
在Openfeign處理遠(yuǎn)程服務(wù)調(diào)用時(shí),傳遞參數(shù)是通過(guò)HTTP協(xié)議傳遞的,參數(shù)存在的位置是請(qǐng)求頭或請(qǐng)求體中。請(qǐng)求頭傳遞的參數(shù)必須依賴@RequestParam注解來(lái)處理請(qǐng)求參數(shù),請(qǐng)求體傳遞的參數(shù)必須依賴@RequestBody注解來(lái)處理請(qǐng)求參數(shù)。
三、?Openfeign的性能優(yōu)化
1?GZIP簡(jiǎn)介
gzip介紹:gzip是一種數(shù)據(jù)格式,采用用deflate算法壓縮數(shù)據(jù);gzip是一種流行的數(shù)據(jù)壓縮算法,應(yīng)用十分廣泛,尤其是在Linux平臺(tái)。
gzip能力:當(dāng)Gzip壓縮到一個(gè)純文本數(shù)據(jù)時(shí),效果是非常明顯的,大約可以減少70%以上的數(shù)據(jù)大小。
gzip作用:網(wǎng)絡(luò)數(shù)據(jù)經(jīng)過(guò)壓縮后實(shí)際上降低了網(wǎng)絡(luò)傳輸?shù)淖止?jié)數(shù),最明顯的好處就是可以加快網(wǎng)頁(yè)加載的速度。網(wǎng)頁(yè)加載速度加快的好處不言而喻,除了節(jié)省流量,改善用戶的瀏覽體驗(yàn)外,另一個(gè)潛在的好處是Gzip與搜索引擎的抓取工具有著更好的關(guān)系。例如 Google就可以通過(guò)直接讀取gzip文件來(lái)比普通手工抓取更快地檢索網(wǎng)頁(yè)。
HTTP協(xié)議中的壓縮傳輸簡(jiǎn)介

第一:客戶端向服務(wù)器請(qǐng)求頭中帶有:Accept-Encoding:gzip, deflate 字段,向服務(wù)器表示,客戶端支持的壓縮格式(gzip或者deflate),如果不發(fā)送該消息頭,服務(wù)器是不會(huì)壓縮的。
第二:服務(wù)端在收到請(qǐng)求之后,如果發(fā)現(xiàn)請(qǐng)求頭中含有Accept-Encoding字段,并且支持該類型的壓縮,就對(duì)響應(yīng)報(bào)文壓縮之后返回給客戶端,并且攜帶Content-Encoding:gzip消息頭,表示響應(yīng)報(bào)文是根據(jù)該格式壓縮過(guò)的。
第三:客戶端接收到響應(yīng)之后,先判斷是否有Content-Encoding消息頭,如果有,按該格式解壓報(bào)文。否則按正常報(bào)文處理。
3??在Openfeign技術(shù)中應(yīng)用GZIP壓縮
在Spring Cloud微服務(wù)體系中,一次請(qǐng)求的完整流程如下:

在整體流程中,如果使用GZIP壓縮來(lái)傳輸數(shù)據(jù),涉及到兩次請(qǐng)求-應(yīng)答。而這兩次請(qǐng)求-應(yīng)答的連接點(diǎn)是Application Client,那么我們需要在Application Client中配置開啟GZIP壓縮,來(lái)實(shí)現(xiàn)壓縮數(shù)據(jù)傳輸。
3.1?只配置Openfeign請(qǐng)求-應(yīng)答中的GZIP壓縮
只開啟Feign請(qǐng)求-應(yīng)答過(guò)程中的GZIP,也就是瀏覽器-Application Client之間的請(qǐng)求應(yīng)答不開啟GZIP壓縮。
在全局配置文件中,使用下述配置來(lái)實(shí)現(xiàn)Openfeign請(qǐng)求-應(yīng)答的GZIP壓縮


3.2?配置全局GZIP壓縮
在全局配置文件中配置下述內(nèi)容,來(lái)開啟所有請(qǐng)求-應(yīng)答中的GZIP壓縮,這里使用的是Spring Boot中的GZIP技術(shù)。在Spring Boot中已經(jīng)集成了GZIP壓縮技術(shù),并對(duì)所有的請(qǐng)求-應(yīng)答實(shí)現(xiàn)GZIP數(shù)據(jù)壓縮。工程中已經(jīng)依賴了Spring Boot技術(shù),所以在配置文件中可以開啟Spring Boot中的GZIP壓縮技術(shù),對(duì)完整流程中所有相關(guān)的請(qǐng)求-應(yīng)答開啟GZIP壓縮。


四、?配置Openfeign負(fù)載均衡請(qǐng)求超時(shí)時(shí)間
Openfeign技術(shù)底層是通過(guò)Ribbon技術(shù)實(shí)現(xiàn)的,那么在負(fù)載均衡和超時(shí)時(shí)間配置上,主要對(duì)Ribbon的配置。具體配置如下:
1?超時(shí)時(shí)間配置
在Application Client應(yīng)用的配置文件上,增加下述配置:
ribbon:
??# 請(qǐng)求連接的超時(shí)時(shí)間,單位毫秒,默認(rèn)的時(shí)間為1秒
??ConnectTimeout: 1000
??# 請(qǐng)求處理的超時(shí)時(shí)間,單位毫秒,默認(rèn)的時(shí)間為1秒
??ReadTimeout: 1000
1?負(fù)載均衡配置
# 設(shè)置負(fù)載均衡策略。openfeign-service為設(shè)置負(fù)載均衡的服務(wù)名稱
openfeign-service:
??ribbon:
????NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule