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"}}