天天看點

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

上一篇:如何基于Nacos叢集部署方案? | 帶你讀《Spring Cloud Alibaba(2019)》之八 下一篇:Gateway怎樣實作服務轉發? | 帶你讀《Spring Cloud Alibaba(2019)》之十

本文來自于《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,

點選檢視視訊内容

本文系志願者整理,供配合學習中心課程使用,不做商業用途。

SpringCloud Gateway

什麼是微服務網關

微服務網關是整個微服務API請求的入口,可以實作過濾Api接口。

作用:可以實作使用者的驗證登入、解決跨域、日志攔截、權限控制、限流、熔斷、負載均衡、黑名單與白名單機制等。

微服務中的架構模式采用前後端分離,前端調用接口位址都能夠被抓包分析到。

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

在微服務中,我們所有的企業入口必須先經過Api網關,經過Api網關轉發到真實的伺服器中。

如果此時需要添加驗證會話資訊:

傳統的方式我們可以使用過濾器攔截使用者會話資訊,這個過程所有的伺服器都必須寫入該驗證會話登入的代碼。

過濾器與網關的差別

過濾器适合于單個服務實作過濾請求;

網關攔截整個的微服務實作過濾請求,能夠解決整個微服務中備援代碼。

過濾器是局部攔截,網關實作全局攔截。

Zuul與Gateway有哪些差別

Zuul網關屬于netfix公司開源的産品,屬于第一代微服務網關

Gateway屬于SpringCloud自研發的網關架構,屬于第二代微服務網關

相比來說SpringCloudGateway性能比Zuul性能要好:

注意:Zuul網關底層基于Servlet實作的,阻塞式的Api,不支援長連接配接。

SpringCloudGateway基于Spring5建構,能夠實作響應式非阻塞式的Api,支援長連接配接,能夠更好的整合Spring體系的産品,依賴SpringBoot-WebFux。

Gateway環境快速搭建

建立一個項目:mayikt-gateway

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud 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/           
什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

在我們需要服務名稱擷取位址的情況下,這個一定要設定為true。但現在我們并不需要,是以可以不需要它。

關于比對規則,預設設為false。

網關的服務端口号一般是:80或者443

這個配置所表示的是:

127.0.0.1/mayikt 轉發到

http://www.mayikt.com/

uri:

去掉末尾的“/”,uri:

http://www.mayikt.com

之後我們操作來運作一下

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

此時執行結果如下:

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

程式出錯了,最主要的原因是gateway不依賴于serverlet,是以我們需要去掉之前添加的依賴。

之後再次運作,執行結果如下:

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway

與螞蟻課堂的404頁面一緻,是因為CSS頁面都是靜态的,是以為了避免這種錯誤,我們一般都需要在最後加上“/”。

執行結果:

什麼是微服務網關? | 帶你讀《Spring Cloud Alibaba(2019)》之九SpringCloud Gateway