美文网首页spring cloud gateway 2.0
spring cloud gateway 2 深入了解 - Pr

spring cloud gateway 2 深入了解 - Pr

作者: wine_5664 | 来源:发表于2018-07-12 16:29 被阅读0次

    示例项目:https://github.com/14251104246/spring-cloud-gateway-demo/tree/Predicate

    spring cloud gateway 通过谓词(Predicate)来匹配来自用户的请求

    为了方便,使用postman测试不同的谓词的效果

    路径谓词(Predicate)—— 最简单的谓词

    • 配置如下
    spring:
      cloud:
        gateway:
          routes:
            # 匹配指定路径的路由
          - id: path_route
            uri: http://www.baidu.com
            predicates:
            - Path=/baidu/**
            filters:
            - StripPrefix=1
    
    • Path谓词配置的- Path=/baidu/**的作用是:匹配所有请求路径以http://localhost:8888/baidu开头的用户请求
    • 用postman请求http://localhost:8888/baidu,返回百度网页的HTML,效果如图
    image.png

    cookie谓词

    • 配置如下
    spring:
      cloud:
        gateway:
          routes:
            # 匹配指定cookie的路由
          - id: cookie_route
            uri: http://www.taobao.com
            predicates:
            - Cookie=chocolate, value
    
    • Cookie谓词配置的- Cookie=chocolate, value的作用是:匹配请求中存在cookiechocolate=value的所有请求
      • 注意:- Cookie=chocolate, value中的value是正则表达式
    • 用postman随便请求一个urlhttp://localhost:8888/1111111,只要存在cookiechocolate=value,都网关都会匹配到对应路由,最后返回淘宝的HTML,效果如图
    image.png

    请求头谓词

    • 配置如下
    spring:
      cloud:
        gateway:
          routes:
            # 匹配指定请求头的路由
          - id: header_route
            uri: http://www.jd.com/
            predicates:
            - Header=X-Request-Id, \d+
    
    • Header谓词配置的- Header=X-Request-Id, \d+的作用是:匹配请求头中存在符合条件“key为X-Request-Id,value为数字”的所有请求
      • 注意:Header=X-Request-Id, \d+,第二个参数是正则表达式,如\d+
    • 用postman随便请求一个urlhttp://localhost:8888/2222222,只要请求头中符合key为X-Request-Id,value为数字,都网关都会匹配到对应路由,最后返回京东的HTML,效果如图
    image.png

    请求参数谓词

    • 配置如下
    spring:
      cloud:
        gateway:
          routes:
            # 匹配指定请求参数的路由
          - id: cookie_route
            uri: http://tmall.com/
            predicates:
            - Query=param1,value
    
    • 上面请求参数谓词- Query=param1,value的含义是: 匹配所有含有请求参数param1且它的值符合正则表达式value的请求

      • 注意:- Query=param1,value中的value是正则表达式
      • 注意:- Query=param1,value中的value可以省略
        • 即可变成- Query=param1,这是匹配所有请求参数含有param1的请求并且不筛选值
    • 效果如下

    image.png

    其他谓词

    • host谓词匹配对应的host,如下匹配www.somehost.orgbeta.somehost.org
    spring:
      cloud:
        gateway:
          routes:
          - id: host_route
            uri: http://example.org
            predicates:
            - Host=**.somehost.org
    
    • Method方法谓词匹配如getpost等请求的方法
    spring:
      cloud:
        gateway:
          routes:
          - id: method_route
            uri: http://example.org
            predicates:
            - Method=GET
    
    • RemoteAddr为ip地址谓词,匹配对应ip地址
    spring:
      cloud:
        gateway:
          routes:
          - id: remoteaddr_route
            uri: http://example.org
            predicates:
            - RemoteAddr=192.168.1.1/24
    
    • AfterBeforeBetween等时间谓词,分别匹配在某时之后,之前,和某段时间内的请求

    谓词组合

    • 不同谓词之间可以组合使用。它们同时存在于同一个路由时,请求必须同时满足所有的谓词条件才被这个路由匹配。
      • 注意:一个请求满足多个路由的谓词条件时,请求只会被首个成功匹配的路由转发
    • 配置如下
    spring:
      cloud:
        gateway:
          routes:
            # 匹配指定请求参数和请求头的路由
          - id: compose_route
            uri: http://www.oschina.net/
            predicates:
            - Query=param2
            - Header=Header-Route,value
    
    • 效果如下
    image.png

    相关文章

      网友评论

        本文标题:spring cloud gateway 2 深入了解 - Pr

        本文链接:https://www.haomeiwen.com/subject/gdsrpftx.html