Spring Cloud Gateway 路由轉發之After(Before)路由斷言工廠使用

♂???木發表於2019-03-12

前言


本文旨在介紹After(Before)路由斷言工廠使用,以此類推可以使用其他路由斷言工廠

案例


1、概念

閘道器簡單的說就是提供一個對外統一的API入口和出口,統管企業對外的所有API出口。一般來說,閘道器對外暴露的URL或者介面資訊,
我們統稱之為路由資訊。如果研發過閘道器中介軟體,或者使用或瞭解過ZUUL的,閘道器的核心肯定是Filter以及FilterChain(Filter責任鏈)。
Spring Cloud Gateway也具有路由資訊和Filter。下面介紹一下Spring Cloud gateway中最重要的幾個概念
                                                                                    ---引用自http://xujin.org/sc/gw/gw04/
複製程式碼
路由(route):路由是閘道器最基礎的部分,路由資訊由一個ID、一個目的url、一組斷言工廠和一組Filter組成。如果路由斷言工廠為真,則說明請求的Url和配置的路由匹配。
複製程式碼
斷言(Predicate): java 8中的斷言函式。Spring Cloud Gateway中的斷言函式輸入型別是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway中的斷言函式允許開發者去定義匹配來自於http request中的任何資訊,比如請求頭和引數等。
複製程式碼
過濾器(filter):一個標準的Spring webFilter。Spring Cloud Gateway中的Filter分為兩種型別的Filter,分別是Gateway Filter和Global Filter.閘道器 Filter例項是由Spring 框架中的閘道器Filter的特殊工廠構造。request在轉發到目前服務之前,response在返回到呼叫端之前都可以被修改或者自定義。
複製程式碼

2、什麼是After(Before)路由斷言?
Before路由斷言工廠帶有一個UTC時間格式的時間引數,當請求進來的當前時間在路由斷言工廠之前會成功匹配,否則不能成功匹配。
After路由斷言工廠帶有一個UTC時間格式的時間引數,當請求進來的當前時間在路由斷言工廠之後會成功匹配,否則不能成功匹配。

3、案例
Spring Cloud Gateway 路由轉發案例基礎上修改application.yml檔案中斷言配置

server:
  port: 9001
spring:
  application:
    name: service-agateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    #將此服務設定為閘道器
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      #路由名稱
      - id: consumer_route
      #跳轉路由
        uri: http://www.scnunanshen.online/
      #斷言,設定攔截條件
        predicates:
        - After=2018-03-18T17:32:58.129+08:00[Asia/Shanghai]        

#此處為After斷言工廠,表示在該時間之後的請求都將跳轉到uri
複製程式碼

4、其他斷言工廠

  • 通過Cookie資訊配置
  • 通過Header屬性匹配
  • 通過Host主機匹配
  • 通過請求方式匹配
  • 通過請求引數匹配
  • 以上方式組合使用

示例:引數匹配方式

server:
  port: 9001
spring:
  application:
    name: service-agateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    #將此服務設定為閘道器
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      #路由名稱
      - id: consumer_route
      #跳轉路由
        uri: http://www.scnunanshen.online/
      #斷言,設定攔截條件
        predicates:
        - Query=nan

#此處表示設定當訪問url中存在nan屬性時,路由才會匹配
#http://localhost:9001/aa?nan=1訪問 ,斷言為真路由匹配。

#也可以同時設定屬性跟值如:- Query=nan,2
#當路由匹配nan=2時,才會被攔截
複製程式碼

相關文章