Spring Cloud网关动态路由JSON化配置

1、断言(Predicates)

(1)Path
配置请求路径的匹配规则

# yml配置,多个参数用逗号隔开
- 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请求中设置的内容,也是第一个为key,第二个为value,比如:http-header设置X-Request-Id:\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请求中的查询参数,请求中携带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
设置该时间之后可以访问

# 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
设置该时间之前可以访问

# 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
设置时间段内可以访问

# 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
至少两组以上路由可以配置权重路由,配置后会根据权重随机访问几个路由

# 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
添加请求参数

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

(4)AddResponseHeader
添加响应头

# 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,去除掉前面两个前缀之后,最后转发到目标服务的路径为/test

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

(7)PreserveHostHeader
请求携带保留原始Host

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

(8)RedirectTo
重定向,302是HTTP状态码

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

(9)Hystrix
熔断

# yml配置
- name: Hystrix
  args:
      # 熔断后跳转地址
      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  #允许用户每秒执行多少请求,而不会丢弃任何请求
     redis-rate-limiter.burstCapacity: 20  #允许在一秒钟内完成的最大请求数,将此值设置为零将阻止所有请求
 
# 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
删除响应头属性

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

(13)RewriteResponseHeader
重写响应头,比如:将响应头中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
重设请求路径,比如:请求/service/my/test,被改为/test

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

(15)SetResponseHeader
设置响应头,比如:将X-Response-Foo的值设置为test

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

(16)SetStatus
设置响应状态码,将当前响应的状态码设置为401

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

(17)SetRequestSize
设置文件传输大小

# 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"}} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容