天天看點

微服務網關 zuul 替代者 gateway 網關路由

簡述

Spring Cloud Gateway 是 Spring Cloud 的一個子項目,該項目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術開發的網關,它旨在為微服務架構提供一種簡單有效的統一的 API 路由管理方式。

Spring Cloud Gateway 作為 Spring Cloud 生态系統中的網關,目标是替代 Netflix Zuul,其不僅提供統一的路由方式,并且基于 Filter 的方式提供了網關基本的功能,例如:安全,監控/名額,和限流。

相關概念

Route(路由):網關的基本構件塊,類似于 nginx 的 location 配置。由一個 ID、一個目标 URI、一組 Predicate 和一組 Filter 定義

Predicate(斷言):路由組成的一部分,主要負責路由的比對,來決定此次請求是否比對路由,我們可以使用它比對來自 HTTP 請求的任何内容,比如路徑、參數或者 header 資訊等等

Filter(過濾器):這個是 GatewayFilter 的執行個體,請求經過 Predicate 比對路由之後執行 Filter,我們可以使用它修改請求和響應。

 Spring Cloud Gateway 網關路由有兩種配置方式:

通過配置檔案配置

通過 @Bean 自定義 RouteLocator 去配置

這兩種方式是等價的,建議使用配置檔案配置。因為 Spring Cloud Gateway 使用響應式程式設計架構,學習曲線相對陡峭。

server:
  port: 8088
eureka:
  client:
    serviceUrl:
      # 注冊中心位址
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: test-gateway
  cloud:
    gateway:
      routes:
        - id: test1
          uri: http://www.fhadmin.org
          predicates:
            - Path=/fhadmin/**
          filters:
            - StripPrefix=1           

各字段含義如下:

id:我們自定義的路由 ID,保持唯一

uri:目标服務位址,大部分場景我們是轉發到某個服務上,配置 uri: lb://user-service 意思是請求要轉發到注冊中心的 user-service 服務上。 

predicates:路由條件,接受一個參數,傳回一個布爾結果決定是否比對。Gateway 為我們内置了多種路由條件,包括 Path、Cookie、Param、Header、Before、After 等等,開箱即用,當然我們也可以自己實作 predicates

filters:過濾規則,當請求經過 predicate 比對成功後,執行 filter,我們可以使用它修改請求和響應,示例表示目标服務收到的 path 将無第一級。

啟動程式,當我們通路 localhost:8088/baidu 時,gateway 會根據我們配置的路由規則轉發到 http://www.fhadmin.org。

工作原理

微服務網關 zuul 替代者 gateway 網關路由

解決單點故障的問題

繼續閱讀