Spring Cloud服務(wù)入口Gateway的介紹和使用問(wèn)題小結(jié)
Gateway
問(wèn)題引入
前?我們通過(guò)Eureka, Nacos解決了服務(wù)注冊(cè), 服務(wù)發(fā)現(xiàn)的問(wèn)題, 使?Spring Cloud LoadBalance解決了負(fù)載均衡的問(wèn)題, 使?OpenFeign解決了遠(yuǎn)程調(diào)?的問(wèn)題.
但是當(dāng)前所有微服務(wù)的接?都是直接對(duì)外暴露的, 可以直接通過(guò)外部訪問(wèn). 為了保證對(duì)外服務(wù)的安全性,服務(wù)端實(shí)現(xiàn)的微服務(wù)接?通常都帶有?定的權(quán)限校驗(yàn)機(jī)制. 由于使?了微服務(wù), 原本?個(gè)應(yīng)?的的多個(gè)模塊拆分成了多個(gè)應(yīng)?, 我們不得不實(shí)現(xiàn)多次校驗(yàn)邏輯. 當(dāng)這套邏輯需要修改時(shí), 我們需要修改多個(gè)應(yīng)?, 加重了開發(fā)?員的負(fù)擔(dān).
針對(duì)以上問(wèn)題, ?個(gè)常?的解決?案是使?API?關(guān).
API網(wǎng)關(guān)
API?關(guān)(簡(jiǎn)稱?關(guān))也是?個(gè)服務(wù), 通常是后端服務(wù)的唯???. 它的定義類似設(shè)計(jì)模式中的Facade模式(門面模式, 也稱外觀模式). 它就類似整個(gè)微服務(wù)架構(gòu)的??, 所有的外部客?端訪問(wèn), 都需要經(jīng)過(guò)它來(lái)進(jìn)?調(diào)度和過(guò)濾.
?關(guān)核心功能:
權(quán)限控制: 作為微服務(wù)的??, 對(duì)??進(jìn)?權(quán)限校驗(yàn), 如果校驗(yàn)失敗則進(jìn)?攔截
動(dòng)態(tài)路由: ?切請(qǐng)求先經(jīng)過(guò)?關(guān), 但?關(guān)不處理業(yè)務(wù), ?是根據(jù)某種規(guī)則, 把請(qǐng)求轉(zhuǎn)發(fā)到某個(gè)微服務(wù)
負(fù)載均衡: 當(dāng)路由的?標(biāo)服務(wù)有多個(gè)時(shí), 還需要做負(fù)載均衡
限流: 請(qǐng)求流量過(guò)?時(shí), 按照?關(guān)中配置微服務(wù)能夠接受的流量進(jìn)?放?, 避免服務(wù)壓?過(guò)?
常見網(wǎng)關(guān)實(shí)現(xiàn)
業(yè)界常?的?關(guān)?式有很多, 技術(shù)?案也較成熟, 其中不乏很多開源產(chǎn)品, ?如Nginx, Kong, Zuul,
Spring Cloud Gateway等. 下?介紹兩種常?的?關(guān)?案.
Zuul
Zuul 是 Netflix 公司開源的?個(gè)API?關(guān)組件, 是Spring Cloud Netflix ?項(xiàng)?的核?組件之?,它可以和 Eureka、Ribbon、Hystrix 等組件配合使?.
在Spring Cloud Finchley正式版之前, Spring Cloud推薦的?關(guān)是Netflix提供的Zuul(此處指Zuul 1.X).然而Netflix在2018年宣布?部分組件進(jìn)?維護(hù)狀態(tài), 不再進(jìn)?新特性的開發(fā). 這部分組件中就包含Zuul.
Spring Cloud Gateway
Spring Cloud Gateway 是Spring Cloud的?個(gè)全新的API?關(guān)項(xiàng)?, 基于Spring + SpringBoot等技術(shù)開發(fā), ?的是為了替換掉Zuul. 旨在為微服務(wù)架構(gòu)提供?種簡(jiǎn)單?有效的途徑來(lái)轉(zhuǎn)發(fā)請(qǐng)求, 并為他們提供橫切關(guān)注點(diǎn), ?如: 安全性, 監(jiān)控/指標(biāo)和彈性.
在性能??, 根據(jù)官?提供的測(cè)試報(bào)告, Spring Cloud Gateway的RPS(每秒請(qǐng)求數(shù))是Zuul的1.6倍.
Gateway的使用
創(chuàng)建網(wǎng)關(guān)Module
引入網(wǎng)關(guān)依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
編寫啟動(dòng)類
package gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
添加Gateway路由配置
server: port: 8888 spring: application: name: gateway cloud: nacos: discovery: server-addr: 47.98.109.138:8848 gateway: metrics: enabled: true routes: - id: order-service #路由規(guī)則id, 隨便起, 不重復(fù)即可 uri: lb://order-service/ #目標(biāo)服務(wù)地址 predicates: #路由條件 - Path=/order/**,/feign/** - id: product-service uri: lb://product-service/ predicates: - Path=/product/**
配置字段說(shuō)明:
配置字段說(shuō)明:
• id : ?定義路由ID, 保持唯?
• uri: ?標(biāo)服務(wù)地址, ?持普通URI 及 lb://應(yīng)?注冊(cè)服務(wù)名稱 . lb表?負(fù)載均衡, 使? lb:// ?
式表示從注冊(cè)中?獲取服務(wù)地址.
• predicates: 路由條件, 根據(jù)匹配結(jié)果決定是否執(zhí)?該請(qǐng)求路由, 上述代碼中, 我們把符合Path規(guī)則的?切請(qǐng)求, 都代理到uri參數(shù)指定的地址.
啟動(dòng)服務(wù)并訪問(wèn)
到此這篇關(guān)于Spring Cloud服務(wù)入口Gateway的介紹和使用問(wèn)題小結(jié)的文章就介紹到這了,更多相關(guān)Spring Cloud Gateway使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring Boot 3 整合 Spring Cloud Gateway實(shí)踐過(guò)程
- spring?cloud?gateway限流常見算法實(shí)現(xiàn)
- SpringCloud的網(wǎng)關(guān)Zuul和Gateway詳解
- SpringCloud Zuul和Gateway的實(shí)例代碼(搭建方式)
- 一文掌握spring cloud gateway(總結(jié)篇)
- SpringCloudGateway 網(wǎng)關(guān)登錄校驗(yàn)實(shí)現(xiàn)思路
- Spring?Cloud?Gateway服務(wù)網(wǎng)關(guān)限流問(wèn)題及解決
相關(guān)文章
Springboot手動(dòng)連接庫(kù)并獲取指定表結(jié)構(gòu)的示例代碼
這篇文章主要介紹了Springboot手動(dòng)連接庫(kù)并獲取指定表結(jié)構(gòu)的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07劍指Offer之Java算法習(xí)題精講數(shù)組與字符串題
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié)
這篇文章主要介紹了Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02詳解使用SSM實(shí)現(xiàn)簡(jiǎn)單工作流系統(tǒng)之實(shí)現(xiàn)篇
這篇文章主要介紹了使用SSM實(shí)現(xiàn)簡(jiǎn)單工作流系統(tǒng)之實(shí)現(xiàn)篇,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12SpringBoot接收f(shuō)orm-data和x-www-form-urlencoded數(shù)據(jù)的方法
form-data和x-www-form-urlencoded是兩種不同的HTTP請(qǐng)求體格式,本文主要介紹了SpringBoot接收f(shuō)orm-data和x-www-form-urlencoded數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05JavaWeb的監(jiān)聽器和過(guò)濾器你了解嗎
這篇文章主要為大家詳細(xì)介紹了JavaWeb的監(jiān)聽器和過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02Java SpringBoot詳解集成以及配置Swagger流程
Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)。總體目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來(lái)更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來(lái)始終保持同步2021-10-10