配置predicates和filters有兩種方式:簡寫和全參數展開。
公式:name=name,regexp,例如
如果yaml文件標準壹樣進行配置,通常會有name和args兩個鍵,args是壹個map的鍵值對組配置predicate或者filter。如下:
每種路由的判斷依據都是根據Http請求的不同屬性。
**
value為正則表達式
value為正則表達式
每個Host為Ant-style格式,以.號分割。
參數包括壹個Spring PathMatcherpatterns和壹個可選的matchOptionalTrailingSeparator分隔符
上面的規則可以匹配諸如/red/1/red/blue/blue/green等路徑。
抽取URI中的模板變量(如segment),作為鍵值對存儲在ServerWebExchange.getAttributes(),key為ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。這些值可以被GatewayFilter factories獲取到。有個工具方法可以更簡單地獲取到這些值。如下
value為正則表達式
格式為CIDR-notation,例如192.168.0.1/16,192.168.0.1是ip,16是子網掩碼。
配置兩個參數:group和weight(數值)。
上面的配置會讓 80%的請求發送到weighthigh.org, 20%的請求發送到weightlow.org。
增加請求頭參數,可以使用URI變量
增加查詢參數,可以使用URI變量
增加響應頭中參數,可以使用URI變量
去掉重復的響應頭參數
上面會去掉重復的Access-Control-Allow-Credentials,Access-Control-Allow-Origin參數值。
可以設置strategy值修改默認刪除策略,默認為RETAIN_FIRST,即保留第壹個。其他有RETAIN_LAST,RETAIN_UNIQUE。
輕量的斷路由
可以替換頭部的參數的名稱,如將Blue:abc替換為X-Request-Red:abc
增加前綴,例如/hello將被發送到/mypath/hello
The RequestRateLimiter GatewayFilter Factory
通過實現RateLimiter接口配置限流規則,可通過keyResolver參數設置具體的限流的key。現在默認的是PrincipalNameKeyResolver,調用的是 ServerWebExchange 中的 Principal.getName()。
如果key解析後為空,請求會被拒絕,可以通過配置下面參數進行自定義策略
spring.cloud.gateway.filter.request-rate-limiter.deny-empty-key ( true or false ) spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code
redis限流,使用的是令牌桶算法。
redis-rate-limiter.replenishRate 每秒多少個請求,也是令牌入桶的頻率。
redis-rate-limiter.burstCapacity 峰值請求。
redis-rate-limiter.requestedTokens 每個請求消耗的令牌數,默認1.
如果想保持穩定的請求頻率,可以設置 replenishRate 和 burstCapacity 為相同值,如果有突發的大量請求,則需要設置 burstCapacity 比 replenishRate 大。
如果想設置每分鐘1個請求,可以通過以下配置實現
replenishRate=1
requestedTokens=60
burstCapacity=60
也可以實現自己的 RateLimiter 和 KeyResolver
配置參數 status and url
刪除指定的請求頭參數
刪除指定響應頭參數
刪除請求參數
重寫路徑
上面配置會把/red/blue變為/blue
/red/blue會變為/blue
替換請求頭參數值
替換響應頭參數值
設置狀態碼
上面兩種配置都會設置為401
刪除前綴
上面的配置將使/name/blue/red變為nameservice/red。
參考
https://cloud.spring.io/spring-cloud-gateway/reference/html/#the-path-route-predicate-factory