java架構(gòu)師高端課微服務(wù)_07_SpringCloud_Gateway
主要內(nèi)容
Spring Cloud Gateway簡介
使用Spring Cloud Gateway實現(xiàn)路由功能
使用Spring Cloud Gateway實現(xiàn)過濾器功能
使用Spring Cloud Gateway實現(xiàn)熔斷功能
學(xué)習(xí)目標(biāo)

Spring Cloud?Gateway
一、?Spring Cloud Gateway簡介
1?概述
Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供簡單、有效和統(tǒng)一的API路由管理方式,Spring Cloud Gateway作為Spring Cloud生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代Netflix Zuul,其不僅提供統(tǒng)一的路由方式,并且還基于Filer鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全、監(jiān)控/埋點、限流等。
2?核心概念
2.1?API網(wǎng)關(guān)
API 網(wǎng)關(guān)出現(xiàn)的原因是微服務(wù)架構(gòu)的出現(xiàn),不同的微服務(wù)一般會有不同的網(wǎng)絡(luò)地址,而外部客戶端可能需要調(diào)用多個服務(wù)的接口才能完成一個業(yè)務(wù)需求,如果讓客戶端直接與各個微服務(wù)通信,會有以下的問題:
客戶端會多次請求不同的微服務(wù),增加了客戶端的復(fù)雜性。
存在跨域請求,在一定場景下處理相對復(fù)雜。
認證復(fù)雜,每個服務(wù)都需要獨立認證。
難以重構(gòu),隨著項目的迭代,可能需要重新劃分微服務(wù)。例如,可能將多個服務(wù)合并成一個或者將一個服務(wù)拆分成多個。如果客戶端直接與微服務(wù)通信,那么重構(gòu)將會很難實施。
某些微服務(wù)可能使用了防火墻 / 瀏覽器不友好的協(xié)議,直接訪問會有一定的困難。
?
以上這些問題可以借助 API 網(wǎng)關(guān)解決。API 網(wǎng)關(guān)是介于客戶端和服務(wù)器端之間的中間層,所有的外部請求都會先經(jīng)過 API 網(wǎng)關(guān)這一層。也就是說,API 的實現(xiàn)方面更多的考慮業(yè)務(wù)邏輯,而安全、性能、監(jiān)控可以交由 API 網(wǎng)關(guān)來做,這樣既提高業(yè)務(wù)靈活性又不缺安全性。
使用API網(wǎng)關(guān)后示意圖:

使用 API 網(wǎng)關(guān)后的優(yōu)點如下:
易于監(jiān)控??梢栽诰W(wǎng)關(guān)收集監(jiān)控數(shù)據(jù)并將其推送到外部系統(tǒng)進行分析。
易于認證。可以在網(wǎng)關(guān)上進行認證,然后再將請求轉(zhuǎn)發(fā)到后端的微服務(wù),而無須在每個微服務(wù)中進行認證。
統(tǒng)一接入。減少了客戶端與各個微服務(wù)之間的交互次數(shù)。
2.2?路由
路由是網(wǎng)關(guān)最基礎(chǔ)的部分,路由信息有一個ID、一個目的URL、一組斷言和一組Filter組成。如果斷言路由為真,則說明請求的URL和配置匹配。
2.3?過濾器
一個標(biāo)準的Spring webFilter。Spring cloud gateway中的filter分為兩種類型的Filter,分別是Gateway Filter和Global Filter。過濾器Filter將會對請求和響應(yīng)進行修改處理。執(zhí)行示意圖如下:

如上圖所示,Spring cloudGateway發(fā)出請求。然后再由Gateway Handler Mapping中找到與請求相匹配的路由,將其發(fā)送到Gateway web handler。Handler再通過指定的過濾器鏈將請求發(fā)送到我們實際的服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。
三、?使用Spring Cloud Gateway實現(xiàn)路由功能
1?入門案例
1.1?創(chuàng)建Gateway項目

1.1.1?POM文件


1.1.2?配置文件

1.1.3?啟動類

2??配置文件手工綁定路由規(guī)則
2.1?POM文件
不需要修改。
2.2?配置文件


2.3?啟動類
不需要修改。
三、?使用Spring Cloud Gateway實現(xiàn)過濾器功能
Spring Cloud gateway的filter分為兩種:GatewayFilter和Globalfilter。GlobalFilter會應(yīng)用到所有的路由上,而Gatewayfilter將應(yīng)用到單個路由或者一個分組的路由上。
多個過濾器會根據(jù)配置文件中的定義來決定執(zhí)行順序。
如果提供的自定義過濾器實現(xiàn)了Ordered接口,則可以通過接口中的方法getOrder來決定執(zhí)行順序。具體順序由getOrder方法返回結(jié)果升序排列。
1?Spring Cloud Gateway內(nèi)置過濾器
GatewayFilter是一個接口,通過查看源碼,其有很多實現(xiàn)類,不同的實現(xiàn)類實現(xiàn)不同的過濾功能。具體如下:

常用過濾器有:
AddRequestParameterGatewayFilterFactory - 在指定請求中增加請求參數(shù)的過濾器。
AddRequestHeaderGatewayFilterFactory - 在指定請求中增加請求頭參數(shù)的過濾器。
StripPrefixGatewayFilterFactory - 在指定請求中處理路徑前綴的過濾器。
在Gateway中使用過濾器的方式非常簡單,只要在配置文件中通過過濾器命名前綴即可快速使用,如使用AddRequestParameterGatewayFilterFactory,可以通過AddRequestParameter在配置文件中配置使用;如使用StripPrefixGatewayFilterFactory,可以通過StripPrefix在配置文件中配置使用。
具體配置過程如下:


2??自定義過濾器
2.1?自定義GatewayFilter - 網(wǎng)關(guān)過濾器
2.1.1?自定義過濾器




2.1.2?配置文件


2.2?自定義GlobalFilter - 全局過濾器
GlobalFilter:全局過濾器,不需要在配置文件中配置,作用在所有的路由上,最終通過GatewayFilterAdapter包裝成GatewayFilterChain可識別的過濾器,它為請求業(yè)務(wù)以及路由的URI轉(zhuǎn)換為真實業(yè)務(wù)服務(wù)的請求地址的核心過濾器,不需要配置,系統(tǒng)初始化時加載,并作用在每個路由上。
全局過濾器無需創(chuàng)建工廠類,也無需在配置文件中進行注冊。因為其對所有的網(wǎng)關(guān)代理的路徑都生效。
2.2.1?自定義過濾器


四、?使用Spring Cloud Gateway實現(xiàn)熔斷功能
Spring Cloud Gateway也可以利用Hystrix的熔斷特性,在流量過大時進行服務(wù)降級。
1?POM依賴


2??熔斷處理代碼

3??配置文件




4???啟動類
