互联网技术-alibaba-gateway网关中routers路由匹配规则

  • gateway的主要功能之一是转发请求,转发规则的定义主要包含三个部分

    组成描述
    路由 Route路由是网关的基本单元, 由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
    断言 Predicate路由转发的判断条件,目前SpringCloud Gateway支持多种方式, 常见如:Path、Query、Method、Header等,写法必须遵循 key=vlue的形式
    过滤器 Filter过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容
  • 修改yml文件,
  • 添加
  • routes:
      - id: consumer				  #自定义
        uri: lb://service-consumer    #访问路径
        predicates:					  #断言
          - Path=/consumer/**
        filters:					  #过滤器
          - StripPrefix=1 

     

 

7.3.2 predicates 断言

在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则,有通过 Header、请求参数等不同的条件,来进行作为条件匹配到对应的路由。

简单来说, Predicate 就是一组匹配规则,方便请求过来时,匹配到对应的 Route 进行处理。

  • Spring Cloud GateWay 内置多种 Predicate ,如下:

  •  

规则实例
Path- Path=/gate/,/rule/
Before- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
After- After=2017-01-20T17:42:47.789-07:00[America/Denver]
Between- Between=2017-01-20T17:42:47.789-07:00[America/Denver],2017-01-21T17:42:47.789-07:00[America/Denver]
Cookie- Cookie=chocolate, ch.p
Header- Header=X-Request-Id, \d+
Host- Host=www.hd123.com
Method- Method=GET
Query- Query=baz
RemoteAddr- RemoteAddr=192.168.1.1/24
  • 实例1:通过请求参数匹配

    spring:
      cloud:
        gateway:
          routes:
            - id: query
              uri: http://www.czxy.com
              predicates:
                - Query=my,123
    #访问路径,有参数my将转发到www.czxy.com
    http://localhost:10010/?my=123
  • 实例2:通过请求路径匹配

    spring:
      cloud:
        gateway:
          routes:
            - id: path
              uri: http://www.czxy.com
              predicates:
                - Path=/czxy/{flag}
    # 
    http://localhost:10010/czxy/666

  • 总结:

    • 各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配。

    • 一个请求满足多个路由的断言条件时,请求只会被首个成功匹配的路由转发

7.3.3 Filter 网关过滤器

  • 路由过滤器允许以某种方式修改传入的HTTP请求或传出HTTP响应。

过滤规则实例说明
PrefixPath- PrefixPath=/app对所有的请求路径添加前缀app
RedirectTo- RedirectTo=302, 首页 - 传智专修学院重定向,配置包含重定向的返回码和地址
RemoveRequestHeader- RemoveRequestHeader=X-Request-Foo去掉某个请求头信息
RemoveResponseHeade- RemoveResponseHeader=X-Request-Foo去掉某个响应头信息
RemoveRequestParameter- RemoveRequestParameter=red去掉某个请求参数信息
RewritePath- RewritePath=/where(?<segment>/?.), /test(?<segment>/?.)改写路径 /where/... 改成 /test/...
SetPath- SetPath=/{segment}设置请求路径,与RewritePath类似
SetRequestHeader- SetRequestHeader=X-Request-Red, Blue设置请求头信息
SetStatus- SetStatus=401设置响应状态码
StripPrefix- StripPrefix=2跳过指定路径
RequestSize- name: RequestSize args: maxSize: 5000000请求大小
  • 实例1:跳过指定路径

  • spring:
      cloud:
        gateway:
          routes:
            - id: consumer
              uri: lb://service-consumer  
              predicates:
                - Path=/consumer/**       
              filters:
                - StripPrefix=1

  • 实例2:添加前缀

    #rest  --> http://localhost:10010/consumer/echo/123
    #fegin --> http://localhost:10010/consumer/feign/echo/123
    ​
    
    
    spring:
      cloud:
        gateway:
          routes:
            - id: PrefixPath
              uri: lb://service-consumer
              predicates:
                - Path=/consumer/**
              filters:
                - StripPrefix=1
                - PrefixPath=/feign
    ​
    #feign  --> http://localhost:10010/consumer/echo/123
  • 实例3:改写路径

    #rest --> http://localhost:10010/consumer/echo/123
    
    ​
    
    spring:
      cloud:
        gateway:
          routes:
            - id: RewritePath
              uri: lb://service-consumer
              predicates:
                - Path=/consumer/**
              filters:
                - RewritePath=/consumer(?<segment>/?.*), $\{segment}
    ​
    

    # 正则表达式详解:

    # ?<segment> --> 名称为 segment 的组
    # /?         --> /出现0次或1次
    # .*         --> 任意字符出现0次或多次
    # 总结:将 /?.*匹配到的结果捕获到名称为segment的组中

    # $\{segment} --> 将名称为 segment 的分组捕获到的文本置换到此处
    ## 注意,\的出现是由于避免 yaml 语法认为这是一个变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值