Spring Cloud網(wǎng)關(guān)動態(tài)路由JSON化配置

1、斷言(Predicates)

(1)Path
配置請求路徑的匹配規(guī)則

# yml配置,多個參數(shù)用逗號隔開
- Path = /aa/**,/bb/**
 
# json配置
{"name":"Path","args":{"pattern1":"/aa/**","pattern2":"/bb/**"}}

(2)Cookie
配置對Cookie中值的匹配,第一個為key,第二個為value

# yml配置
- Cookie = chocolate,ch.p
 
# json配置
{"name":"Cookie","args":{"_genkey_0":"chocolate","_genkey_1":"ch.p"}}

(3)Header
匹配Http請求中設(shè)置的內(nèi)容,也是第一個為key,第二個為value,比如:http-header設(shè)置X-Request-Id:\d+可以匹配,第二個參數(shù)是正則表達(dá)式

# yml配置
- Header = X-Request-Id,\d+
 
# json配置
{"name":"Header","args":{"_genkey_0":"X-Request-Id","_genkey_1":"\d+"}}

(4)Host
匹配Http請求Host,比如:匹配所有host為**.somehost.com的請求, **為通配符

# yml配置
- Host = **.somehost.com
 
# json配置
{"name":"Host","args":{"_genkey_0":"**.somehost.com"}}

(5)Method
匹配Http請求方法

# yml配置
- Method = GET
 
# json配置
{"name":"Method","args":{"_genkey_0":"GET"}}

(6)Query
匹配Http請求中的查詢參數(shù),請求中攜帶param=value的請求可以匹配

# yml配置
- Query = param,value
 
# json配置
{"name":"Query","args":{"_genkey_0":"param","_genkey_1":"value"}}

(7)RemoteAddr
匹配請求中的Remote Address

# yml配置
- RemoteAddr = 192.168.1.1/24
 
# json配置
{"name":"RemoteAddr","args":{"_genkey_0":"192.168.1.1/24"}}

(8)After
設(shè)置該時間之后可以訪問

# yml配置
- After = 2020-10-30T15:00:22.432+08:00[Asia/Shanghai]

# json配置
{"name":"After","args":{"_genkey_0":"2020-10-30T15:00:22.432+08:00[Asia/Shanghai]"}}

(9)Before
設(shè)置該時間之前可以訪問

# yml配置
- Before = 2020-10-30T15:00:22.432+08:00[Asia/Shanghai]
 
# json配置
{"name":"Before","args":{"_genkey_0":"2020-10-30T15:00:22.432+08:00[Asia/Shanghai]"}

(10)Between
設(shè)置時間段內(nèi)可以訪問

# yml配置
- Between = 2020-10-30T15:00:22.432+08:00[Asia/Shanghai],2021-10-30T15:00:22.432+08:00[Asia/Shanghai]
 
# json配置
{"name":"Between","args":{"_genkey_0":"2020-10-30T15:00:22.432+08:00[Asia/Shanghai]","_genkey_1":"2021-10-30T15:00:22.432+08:00[Asia/Shanghai]"}}

(11)Weight
至少兩組以上路由可以配置權(quán)重路由,配置后會根據(jù)權(quán)重隨機(jī)訪問幾個路由

# yml配置
- Weight = service,80
 
# json配置
{"name":"Weight","args":{"_genkey_0":"service","_genkey_1":"80"}}

2、過濾器(Filters)

(1)RewritePath
重寫請求的路徑

# yml配置
- RewritePath = /path/(?<segment>.*), /$\{segment}
 
# json配置
{"name":"RewritePath","args":{"_genkey_0":"/foo/(?<segment>.*)","_genkey_1":"/$\\{segment}"}}

(2)AddRequestHeader
添加請求頭

# yml配置
- AddRequestHeader = X-Request-Foo,Bar
 
# json配置
{"name":"AddRequestHeader","args":{"_genkey_0":"X-Request-Foo","_genkey_1":"Bar"}}

(3)AddRequestParameter
添加請求參數(shù)

# yml配置
- AddRequestParameter = foo,bar
 
# json配置
{"name":"AddRequestParameter","args":{"_genkey_0":"foo","_genkey_1":"bar"}}

(4)AddResponseHeader
添加響應(yīng)頭

# yml配置
- AddResponseHeader = X-Response-Foo,Bar
 
# json配置
{"name":"AddResponseHeader","args":{"_genkey_0":"X-Response-Foo","_genkey_1":"Bar"}}

(5)PrefixPath
添加路徑前綴,比如:請求路徑/test,被替換成/my/test

# yml配置
- PrefixPath = /my
 
# json配置
{"name":"PrefixPath","args":{"_genkey_0":"/my"}}

(6)StripPrefix
刪除路徑前綴,比如:請求路徑/service/my/test,去除掉前面兩個前綴之后,最后轉(zhuǎn)發(fā)到目標(biāo)服務(wù)的路徑為/test

# yml配置
- StripPrefix = 2
 
# json配置
{"name":"StripPrefix","args":{"_genkey_0":"2"}}

(7)PreserveHostHeader
請求攜帶保留原始Host

# yml配置
- PreserveHostHeader
 
# json配置
{"name":"PreserveHostHeader","args":{}}

(8)RedirectTo
重定向,302是HTTP狀態(tài)碼

# yml配置
- RedirectTo = 302,http://example.org
 
# json配置
{"name":"RedirectTo","args":{"_genkey_0":"302","_genkey_1":"http://example.org"}}

(9)Hystrix
熔斷

# yml配置
- name: Hystrix
  args:
      # 熔斷后跳轉(zhuǎn)地址
      name: fallbackcmd
      fallbackUri: forward:/failure
 
# json配置
{"name":"Hystrix","args":{"name":"fallbackcmd","fallbackUri":"forward:/failure"}}

(10)RequestRateLimiter
集成Redis原生支持請求限流

# yml配置
 - name: RequestRateLimiter
   args:
     redis-rate-limiter.replenishRate: 10  #允許用戶每秒執(zhí)行多少請求,而不會丟棄任何請求
     redis-rate-limiter.burstCapacity: 20  #允許在一秒鐘內(nèi)完成的最大請求數(shù),將此值設(shè)置為零將阻止所有請求
 
# json配置
{"name":"RequestRateLimiter","args":{"redis-rate-limiter.replenishRate":"10","redis-rate-limiter.burstCapacity":"20"}}

(11)RemoveRequestHeader
刪除請求頭屬性

# yml配置
- RemoveRequestHeader = X-Request-Foo
 
# json配置
{"name":"RemoveRequestHeader","args":{"_genkey_0":"X-Request-Foo"}}

(12)RemoveResponseHeader
刪除響應(yīng)頭屬性

# yml配置
- RemoveResponseHeader = X-Response-Foo
 
# json配置
{"name":"RemoveResponseHeader","args":{"_genkey_0":"X-Response-Foo"}}

(13)RewriteResponseHeader
重寫響應(yīng)頭,比如:將響應(yīng)頭中X-Response-Foo的值user=admin&password=111111&status=N, 改為 user=admin&password=123456&status=N

# yml配置
- RewriteResponseHeader = X-Response-Foo,password=111111,password=123456
 
# json配置
{"name":"RewriteResponseHeader","args":{"_genkey_0":"X-Response-Foo","_genkey_1":"password=111111","_genkey_2":"password=123456"}}

(14)SetPath
重設(shè)請求路徑,比如:請求/service/my/test,被改為/test

# yml配置
- SetPath =/test
 
# json配置
{"name":"SetPath","args":{"_genkey_0":"/test"}}

(15)SetResponseHeader
設(shè)置響應(yīng)頭,比如:將X-Response-Foo的值設(shè)置為test

# yml配置
- SetResponseHeader =X-Response-Foo,test
 
# json配置
{"name":"SetResponseHeader","args":{"_genkey_0":"X-Response-Foo","_genkey_1":"test"}}

(16)SetStatus
設(shè)置響應(yīng)狀態(tài)碼,將當(dāng)前響應(yīng)的狀態(tài)碼設(shè)置為401

# yml配置
- name: SetStatus
  args:
      status: 401
 
# json配置
{"name":"SetStatus","args":{"_genkey_0":"401"}}

(17)SetRequestSize
設(shè)置文件傳輸大小

# yml配置
 - name: RequestSize
   args:
       maxSize: 5000000
 
# json配置
{"name":"RequestSize","args":{"_genkey_0":"5000000"}}

(18)Retry
失敗重試

# yml配置
- name: Retry
  args:
      retries: 3
      statuses: BAD_GATEWAY
 
# json配置
{"name":"Retry","args":{"retries":"3","statuses":"BAD_GATEWAY"}} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容