本文來自于《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,
點選檢視視訊内容。
本文系志願者整理,供配合學習中心課程使用,不做商業用途。
SpringCloud Gateway
什麼是微服務網關
微服務網關是整個微服務API請求的入口,可以實作過濾Api接口。
作用:可以實作使用者的驗證登入、解決跨域、日志攔截、權限控制、限流、熔斷、負載均衡、黑名單與白名單機制等。
微服務中的架構模式采用前後端分離,前端調用接口位址都能夠被抓包分析到。

在微服務中,我們所有的企業入口必須先經過Api網關,經過Api網關轉發到真實的伺服器中。
如果此時需要添加驗證會話資訊:
傳統的方式我們可以使用過濾器攔截使用者會話資訊,這個過程所有的伺服器都必須寫入該驗證會話登入的代碼。
過濾器與網關的差別
過濾器适合于單個服務實作過濾請求;
網關攔截整個的微服務實作過濾請求,能夠解決整個微服務中備援代碼。
過濾器是局部攔截,網關實作全局攔截。
Zuul與Gateway有哪些差別
Zuul網關屬于netfix公司開源的産品,屬于第一代微服務網關
Gateway屬于SpringCloud自研發的網關架構,屬于第二代微服務網關
相比來說SpringCloudGateway性能比Zuul性能要好:
注意:Zuul網關底層基于Servlet實作的,阻塞式的Api,不支援長連接配接。
SpringCloudGateway基于Spring5建構,能夠實作響應式非阻塞式的Api,支援長連接配接,能夠更好的整合Spring體系的産品,依賴SpringBoot-WebFux。
Gateway環境快速搭建
建立一個項目:mayikt-gateway
此時需要引入依賴:
Maven依賴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
在此依賴上加入一個依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
此時程式是否會報錯呢?我們來接着進行配置,之後看結果
application配置:
server:
port: 80
####服務網關名稱
spring:
application:
name: mayikt-gateway
cloud:
gateway:
discovery:
locator:
####開啟以服務id去注冊中心上擷取轉發位址
enabled: true
###路由政策
routes:
###路由id
- id: mayikt
####轉發http://www.mayikt.com/
uri: http://www.mayikt.com/
###比對規則
predicates:
- Path=/mayikt/**
### 127.0.0.1/mayikt 轉發到http://www.mayikt.com/
在我們需要服務名稱擷取位址的情況下,這個一定要設定為true。但現在我們并不需要,是以可以不需要它。
關于比對規則,預設設為false。
網關的服務端口号一般是:80或者443
這個配置所表示的是:
127.0.0.1/mayikt 轉發到
http://www.mayikt.com/uri:
去掉末尾的“/”,uri:
http://www.mayikt.com之後我們操作來運作一下
此時執行結果如下:
程式出錯了,最主要的原因是gateway不依賴于serverlet,是以我們需要去掉之前添加的依賴。
之後再次運作,執行結果如下:
與螞蟻課堂的404頁面一緻,是因為CSS頁面都是靜态的,是以為了避免這種錯誤,我們一般都需要在最後加上“/”。
執行結果: