政務(wù)網(wǎng)站隊伍建設(shè)情況匯報怎么免費創(chuàng)建個人網(wǎng)站
GateWay工作流程+GateWay搭建
核心流程圖如下:
核心概念:
客戶端向 Spring Cloud Gateway 發(fā)出請求。如果Gateway Handler Mapping確定請求與路由匹配,則將其發(fā)送到Gateway Web Handler 處理程序。此處理程序通過特定于請求的Fliter鏈運行請求。Fliter被虛線分隔的原因是Fliter可以在發(fā)送代理請求之前(pre)和之后(post)運行邏輯。執(zhí)行所有pre過濾器邏輯。然后進行代理請求。發(fā)出代理請求后,將運行“post”過濾器邏輯。
過濾器作用:
- Filter在pre類型的過濾器可以做參數(shù)效驗、權(quán)限效驗、流量監(jiān)控、日志輸出、協(xié)議轉(zhuǎn)換等。
- Filter在post類型的過濾器可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改、日志輸出、流量監(jiān)控等
- 這兩種類型的過濾器有著非常重要的作用
在GateWay的內(nèi)部有三個核心點,我們先來看一下:
核心點
-
Route(路由)
路由是構(gòu)建網(wǎng)關(guān)的基礎(chǔ)模塊,它由ID,目標(biāo)URI,包括一些列的斷言和過濾器組成,如果斷言為true則匹配該路由
-
Predicate(斷言)
參考的是Java8的java.util.function.Predicate,開發(fā)人員可以匹配HTTP請求中的所有內(nèi)容(例如請求頭或請求參數(shù)),請求與斷言匹配則進行路由
-
Filter(過濾)
指的是Spring框架中GateWayFilter的實例,使用過濾器,可以在請求被路由前或者之后對請求進行修改。
-
三個核心點連起來:
當(dāng)用戶發(fā)出請求到達(dá)GateWay,GateWay會通過一些匹配條件,定位到真正的服務(wù)節(jié)點,并在這個轉(zhuǎn)發(fā)過程前后,進行一些及細(xì)化控制。其中Predicate就是我們匹配的條件,而Filter可以理解為一個攔截器,有了這兩個點,再加上目標(biāo)URI,就可以實現(xiàn)一個具體的路由了。
總結(jié)
GateWay核心的流程就是:路由轉(zhuǎn)發(fā)+執(zhí)行過濾器鏈
GateWay搭建
依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mashibing</groupId><artifactId>cloud-gateway-9999</artifactId><version>0.0.1-SNAPSHOT</version><name>cloud-gateway-9999</name><description>cloud-gateway-9999</description><properties><java.version>1.8</java.version><spring-cloud-alibaba.version>2.2.10-RC1</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version></properties><dependencies><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-gateway</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
## 應(yīng)用名稱
#spring.application.name=cloud-gateway-9999
## Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html
## Nacos認(rèn)證信息
#spring.cloud.nacos.discovery.username=nacos
#spring.cloud.nacos.discovery.password=nacos
## Nacos 服務(wù)發(fā)現(xiàn)與注冊配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機和端口
#spring.cloud.nacos.discovery.server-addr=mse-6d50f4f0-p.nacos-ans.mse.aliyuncs.com:8848
## 注冊到 nacos 的指定 namespace,默認(rèn)為 public
#spring.cloud.nacos.discovery.namespace=publicserver:port: 9999
spring:application:name: cloud-gateway-servicecloud:nacos:discovery:server-addr: localhost:8848gateway:discovery:locator:enabled: true #開啟注冊中心路由功能routes: # 路由- id: nacos-provider #路由ID,沒有固定要求,但是要保證唯一,建議配合服務(wù)名uri: http://localhost:9001/nacos-provider # 匹配提供服務(wù)的路由地址predicates: # 斷言- Path=/msb/** # 斷言,路徑相匹配進行路由
更改9001的DemoController,加上一個入口
package com.paic.test.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/msb")//路由路徑
public class IndexController {@Value("${server.port}")private String port;@GetMapping(value = "/nacos")public String getServerPort(){return "this is nacos server: " + port ;}@GetMapping(value = "/testGateway")public String testGateway(){return "this is testGateway test" + port ;}}
最后測試,啟動Nacos、9001和9999網(wǎng)關(guān),通過網(wǎng)關(guān)訪問9001的/msb/get接口同時查看Nacos控制臺