1.概念及原理
1.1相關(guān)概念
網(wǎng)關(guān)作為流量的入口,常用功能包括路由轉(zhuǎn)發(fā)亏较、權(quán)限校驗(yàn)、限流控制等塔逃。Spring Cloud Gateway作為SpringCloud官方推出的第二代網(wǎng)關(guān)框架,取代了Zuul官網(wǎng)前酿。
網(wǎng)關(guān)提供API全托管服務(wù)患雏,豐富的API管理功能,輔助企業(yè)管理大規(guī)模API罢维,以降低管理成本和安全風(fēng)險(xiǎn)淹仑,包括協(xié)議適配、協(xié)議轉(zhuǎn)發(fā)肺孵、安裝策略匀借、防刷、流量平窘、監(jiān)控日志等功能吓肋。
Spring Cloud Gareway旨在提供一種簡(jiǎn)單有效的方式來(lái)對(duì)API進(jìn)行路由,并為他們提供切面瑰艘,如:安全性是鬼、監(jiān)控/指標(biāo)和彈性等。
官方文檔:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
與網(wǎng)關(guān)相關(guān)的概念有路由(Route)紫新,斷言(Predicate)均蜜、過(guò)濾器(Fliter),詳情請(qǐng)看官方文檔芒率。
1.2 工作流程
如下圖所示:
A. 客戶端向 Spring Cloud Gateway 發(fā)出請(qǐng)求
B. 然后在 Gateway Handler Mapping 中找到與請(qǐng)求相匹配的路由囤耳,將其發(fā)送到 Gateway Web Handler。
C. Handler 再通過(guò)指定的過(guò)濾器鏈來(lái)將請(qǐng)求發(fā)送到我們實(shí)際的服務(wù)執(zhí)行業(yè)務(wù)邏輯偶芍,然后返回充择。
過(guò)濾器之間用虛線分開(kāi)是因?yàn)檫^(guò)濾器可能會(huì)在發(fā)送代理請(qǐng)求之前(“pre”)或之后(“post”)執(zhí)行業(yè)務(wù)邏輯。
2.創(chuàng)建及測(cè)試
2.1 創(chuàng)建mymail-gateway模塊
A. 在我們的項(xiàng)目中新建一個(gè)網(wǎng)關(guān)模塊:mymail-gatewayB. 在新建的mymail-gateway模塊的pom文件中添加mymail-common的依賴
<dependency>
<groupId>com.lyh.mymail</groupId>
<artifactId>mymail-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
C. 在application.properties文件中配置注冊(cè)中心和服務(wù)端口
然后運(yùn)行項(xiàng)目
2.2 測(cè)試
現(xiàn)在我們希望輸入:http://localhost:88/?url=baidu 的時(shí)候匪蟀,路由可以轉(zhuǎn)發(fā)到baidu.com上椎麦,輸入:http://localhost:88/?url=qq的時(shí)候,能夠跳轉(zhuǎn)到qq.com材彪。
接下來(lái)我們需要在application.yml文件中進(jìn)行路由配置
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
配置成功后铃剔,重啟項(xiàng)目,在瀏覽器中輸入http://localhost:88/?url=baidu能夠跳轉(zhuǎn)到百度首頁(yè)查刻。