Springboot整合GateWay+Nacos實現(xiàn)動態(tài)路由
1、簡介
路由轉發(fā) + 執(zhí)行過濾器鏈。
? 網(wǎng)關,旨在為微服務架構提供一種簡單有效的統(tǒng)一的API路由管理方式。同時,基于Filter鏈的方式提供了網(wǎng)關的基本功能,比如:鑒權、流量控制、熔斷、路徑重寫、黑白名單、日志監(jiān)控等。
基本功能如下:
- 統(tǒng)一入口:暴露出網(wǎng)關地址,作為請求唯一入口,隔離內部微服務,保障了后臺服務的安全性
- 鑒權校驗:識別每個請求的權限,拒絕不符合要求的請求
- 動態(tài)路由:動態(tài)的將請求路由到不同的后端集群中
2、gateway核心概念
路由(Route):由一個ID,一個目標URI(最終路由到的url地址),一組斷言(匹配條件判斷)和一組過濾器定義。如果斷言為真,則路由匹配。
斷言(Predicate):通過斷言匹配http請求中的任何內容(請求頭、請求參數(shù)等),如果匹配成功,則匹配斷言所在路由。
過濾器(Filter):在請求前后執(zhí)行業(yè)務邏輯,比如鑒權、日志監(jiān)控、流量控制、修改請求頭、修改響應等。
3、路由
spring: cloud: gateway: routes: - id: manager # 路由唯一標識 uri: lb://manager_server # 路由指向目的地URL或服務名,客戶端請求最終被轉發(fā)到的微服務 predicates: - Path=/manager/** # 斷言:以manager開頭的請求都負載到manager_server服務 filters: - RewritePath=/manager/(?<segment>.*), /$\{segment} # 過濾器:過濾掉url里的manager,例如http://ip:port/manager/test -> http://ip:port/test order: 5 # 用于多個Route之間的排序,數(shù)值越小越靠前,匹配優(yōu)先級越高
4、實戰(zhàn)練習
1、項目結構
2、依賴
1、父依賴
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dubbo.version>3.2.0-beta.4</dubbo.version> <spring-boot.version>2.6.11</spring-boot.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--springcloudalibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.4.0</version> <type>pom</type> <scope>import</scope> </dependency> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.0.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2、服務提供者依賴(provider)
<dependencies> <!-- spring boot starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
3、網(wǎng)關依賴(gateway)
<dependencies> <!--gateway--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>3.1.2</version> </dependency> <!--Nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--客戶端負載均衡loadbalancer--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.1</version> </dependency> </dependencies>
3、配置文件
1、服務提供者1配置(provider)
server: port: 9002 spring: application: name: SpringBoot-Nacos-Dubbo-provider #Nacos注冊中心服務名稱 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #Nacos注冊中心地址
服務提供者2復制修改端口即可
2、gateway配置(路由配置方式1)
server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 #注冊到nacos中 gateway: routes: - id: gateway1 #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務名 uri: http://localhost:9002 #匹配后提供服務的路由地址 predicates: - Path=/provider/** # 斷言,路徑相匹配的進行路由
4、服務提供者Controller
@RestController @RequestMapping("/provider") public class ProviderController { @Value("${server.port}") private String post; @GetMapping("/getpost") public String getPost(){ return "當前端口:"+post; } }
5、項目啟動
啟動服務提供者9002 瀏覽器訪問localhost:8080/provider/getpost
6、gateway配置(路由配置方式2(動態(tài)配置))
負載均衡
傳統(tǒng)模式
gateway
1、配置文件
server: port: 8080 spring: application: name: gateway cloud: nacos: discovery: server-addr: localhost:8848 #注冊到nacos中 gateway: discovery: locator: enabled: true #開啟從注冊中心動態(tài)創(chuàng)建路由的功能,利用微服務名進行路由 routes: - id: gateway1 #路由的ID,沒有固定規(guī)則但要求唯一,建議配合服務名 uri: lb://SpringBoot-Nacos-Dubbo-provider #匹配后提供服務的名稱 用于負載均衡 predicates: - Path=/provider/** # 斷言,路徑相匹配的進行路由
分別啟動服務提供者9002、9001 瀏覽器訪問localhost:8080/provider/getpost 實現(xiàn)負載均衡
到此這篇關于Springboot整合GateWay+Nacos實現(xiàn)動態(tài)路由的文章就介紹到這了,更多相關Springboot 動態(tài)路由內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Javabean基于xstream包實現(xiàn)轉XML文檔的方法
這篇文章主要介紹了Javabean基于xstream包實現(xiàn)轉XML文檔的方法,結合具體實例形式分析了xstream包用于轉換xml文件的具體使用技巧,需要的朋友可以參考下2017-05-05Hibernate的Annotation版Hello world實例
這篇文章主要介紹了Hibernate的Annotation版Hello world實現(xiàn)方法,詳細分析了Annotation的具體使用步驟與Hello world實現(xiàn)方法,需要的朋友可以參考下2016-03-03