Spring Cloud服務(wù)入口Gateway的介紹和使用問題小結(jié)
Gateway
問題引入
前?我們通過Eureka, Nacos解決了服務(wù)注冊, 服務(wù)發(fā)現(xiàn)的問題, 使?Spring Cloud LoadBalance解決了負(fù)載均衡的問題, 使?OpenFeign解決了遠(yuǎn)程調(diào)?的問題.
但是當(dāng)前所有微服務(wù)的接?都是直接對外暴露的, 可以直接通過外部訪問. 為了保證對外服務(wù)的安全性,服務(wù)端實現(xiàn)的微服務(wù)接?通常都帶有?定的權(quán)限校驗機(jī)制. 由于使?了微服務(wù), 原本?個應(yīng)?的的多個模塊拆分成了多個應(yīng)?, 我們不得不實現(xiàn)多次校驗邏輯. 當(dāng)這套邏輯需要修改時, 我們需要修改多個應(yīng)?, 加重了開發(fā)?員的負(fù)擔(dān).
針對以上問題, ?個常?的解決?案是使?API?關(guān).
API網(wǎng)關(guān)
API?關(guān)(簡稱?關(guān))也是?個服務(wù), 通常是后端服務(wù)的唯???. 它的定義類似設(shè)計模式中的Facade模式(門面模式, 也稱外觀模式). 它就類似整個微服務(wù)架構(gòu)的??, 所有的外部客?端訪問, 都需要經(jīng)過它來進(jìn)?調(diào)度和過濾.
?關(guān)核心功能:
權(quán)限控制: 作為微服務(wù)的??, 對??進(jìn)?權(quán)限校驗, 如果校驗失敗則進(jìn)?攔截
動態(tài)路由: ?切請求先經(jīng)過?關(guān), 但?關(guān)不處理業(yè)務(wù), ?是根據(jù)某種規(guī)則, 把請求轉(zhuǎn)發(fā)到某個微服務(wù)
負(fù)載均衡: 當(dāng)路由的?標(biāo)服務(wù)有多個時, 還需要做負(fù)載均衡
限流: 請求流量過?時, 按照?關(guān)中配置微服務(wù)能夠接受的流量進(jìn)?放?, 避免服務(wù)壓?過?
常見網(wǎng)關(guān)實現(xiàn)
業(yè)界常?的?關(guān)?式有很多, 技術(shù)?案也較成熟, 其中不乏很多開源產(chǎn)品, ?如Nginx, Kong, Zuul,
Spring Cloud Gateway等. 下?介紹兩種常?的?關(guān)?案.
Zuul
Zuul 是 Netflix 公司開源的?個API?關(guān)組件, 是Spring Cloud Netflix ?項?的核?組件之?,它可以和 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的?個全新的API?關(guān)項?, 基于Spring + SpringBoot等技術(shù)開發(fā), ?的是為了替換掉Zuul. 旨在為微服務(wù)架構(gòu)提供?種簡單?有效的途徑來轉(zhuǎn)發(fā)請求, 并為他們提供橫切關(guān)注點, ?如: 安全性, 監(jiān)控/指標(biāo)和彈性.
在性能??, 根據(jù)官?提供的測試報告, Spring Cloud Gateway的RPS(每秒請求數(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>
編寫啟動類
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/**
配置字段說明:
配置字段說明:
• id : ?定義路由ID, 保持唯?
• uri: ?標(biāo)服務(wù)地址, ?持普通URI 及 lb://應(yīng)?注冊服務(wù)名稱 . lb表?負(fù)載均衡, 使? lb:// ?
式表示從注冊中?獲取服務(wù)地址.
• predicates: 路由條件, 根據(jù)匹配結(jié)果決定是否執(zhí)?該請求路由, 上述代碼中, 我們把符合Path規(guī)則的?切請求, 都代理到uri參數(shù)指定的地址.
啟動服務(wù)并訪問
到此這篇關(guān)于Spring Cloud服務(wù)入口Gateway的介紹和使用問題小結(jié)的文章就介紹到這了,更多相關(guān)Spring Cloud Gateway使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼
這篇文章主要介紹了Springboot手動連接庫并獲取指定表結(jié)構(gòu)的示例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07劍指Offer之Java算法習(xí)題精講數(shù)組與字符串題
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03Java靜態(tài)代理和動態(tài)代理總結(jié)
這篇文章主要介紹了Java靜態(tài)代理和動態(tài)代理總結(jié),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02詳解使用SSM實現(xiàn)簡單工作流系統(tǒng)之實現(xiàn)篇
這篇文章主要介紹了使用SSM實現(xiàn)簡單工作流系統(tǒng)之實現(xiàn)篇,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12SpringBoot接收form-data和x-www-form-urlencoded數(shù)據(jù)的方法
form-data和x-www-form-urlencoded是兩種不同的HTTP請求體格式,本文主要介紹了SpringBoot接收form-data和x-www-form-urlencoded數(shù)據(jù)的方法,具有一定的參考價值,感興趣的可以了解一下2024-05-05Java SpringBoot詳解集成以及配置Swagger流程
Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)??傮w目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步2021-10-10