SpringCloud 学习 --->>> 11、Gateway 新一代网关 -->> Predicate 断言

Predicate 断言

常用的Route Predicate
  1. The After Route Predicate Factory

    • 此断言匹配在指定日期时间之后发生的请求。
    • 官网示例
    spring:
      cloud:
        gateway:
          routes:
          - id: after_route
            uri: https://example.org
            predicates:
            - After=2017-01-20T17:42:47.789-07:00[America/Denver]
    
    • 获取时间串

    •     System.out.println(ZonedDateTime.now());
      
  2. Before Route Predicate

    • 此断言匹配在指定日期时间之前发生的请求。

    • 官网示例

      spring:
        cloud:
          gateway:
            routes:
            - id: before_route
              uri: https://example.org
              predicates:
              - Before=2017-01-20T17:42:47.789-07:00[America/Denver]
      
  3. The Between Route Predicate Factory

    • 此断言匹配发生在 afterdatetime1和 before的请求datetime2datetime2参数必须在 datetime1 之后
    • 官网实例
    spring:
      cloud:
        gateway:
          routes:
          - id: between_route
            uri: https://example.org
            predicates:
            - Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
    
  4. Cookie Route Predicate

    • 此断言匹配具有给定名称且其值与正则表达式匹配的 cookie。前面是cookiename,后面是正则表达式,对cookie的要求
    • 官网示例,此路由匹配具有名为chocolate其值与ch.p正则表达式匹配的 cookie 的请求。
    spring:
      cloud:
        gateway:
          routes:
          - id: cookie_route
            uri: https://example.org
            predicates:
            - Cookie=chocolate, ch.p
    
  5. Header Route Predicate

    • 此断言与具有给定名称且值与正则表达式匹配的header匹配
    • 官网示例,如果请求具有一个名为X-Request-Id其值与\d+正则表达式匹配的标头(即,它具有一个或多个数字的值),则此路由匹配。
    spring:
      cloud:
        gateway:
          routes:
          - id: header_route
            uri: https://example.org
            predicates:
            - Header=X-Request-Id, \d+
    
  6. Host Route Predicate

    • 该模式是一种 Ant 风格的模式,以分隔符为.分隔符。此断言匹配Host与模式匹配的标头。
    • 官网示例,如果请求具有Host值为www.somehost.orgorbeta.somehost.org或的标头,则此路由匹配www.anotherhost.org
    spring:
      cloud:
        gateway:
          routes:
          - id: host_route
            uri: https://example.org
            predicates:
            - Host=**.somehost.org,**.anotherhost.org
    
  7. Method Route Predicate

    • 匹配指定请求方式的请求
    • 官网示例
    spring:
      cloud:
        gateway:
          routes:
          - id: method_route
            uri: https://example.org
            predicates:
            - Method=GET,POST
    
  8. Path Route Predicate

    • 匹配指定路径的请求

    • 官网示例

      spring:
        cloud:
          gateway:
            routes:
            - id: path_route
              uri: https://example.org
              predicates:
              - Path=/red/{segment},/blue/{segment}
      
  9. Query Route Predicate

    • Query路由断言工厂有两个参数:一个必需的param和一个可选的regexp(它是一个 Java 正则表达式)
    • 官网示例,如果请求包含red其值与正则gree.表达式匹配的查询参数,则前面的路由匹配,因此green并且greet会匹配。
    spring:
      cloud:
        gateway:
          routes:
          - id: query_route
            uri: https://example.org
            predicates:
            - Query=red, gree.
    
配置文件
server:
  port: 8088

spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        # 路由的ID,没有固定规则但要求唯一,建议配合服务名。可能是一个list集合
        - id: payment_routh
          # 匹配后提供服务的路由地址
#          uri: http://localhost:8001
          uri: lb://CLOUD-PAYMENT-SERVICE
          # 断言,路径相匹配的进行路由。可能是一个list集合
          predicates:
            - Path=/payment/get/**
        # 路由的ID,没有固定规则但要求唯一,建议配合服务名.可能是一个list集合
        - id: payment_routh02
          # 匹配后提供服务的路由地址
#          uri: http://localhost:8001
          uri: lb://CLOUD-PAYMENT-SERVICE
          # 断言,路径相匹配的进行路由。可能是一个list集合
          predicates:
            # Path Route Predicate
            - Path=/payment/lb/**
            # After Route Predicate,在时间之后处理请求
            - After=2022-04-19T20:20:44.229+08:00[Asia/Shanghai]
            # Before Route Predicate,在时间之前会处理请求
            - Before=2022-04-20T20:20:44.229+08:00[Asia/Shanghai]
            # Between Route Predicate,在这两事件之间会处理请求
            - Between=2022-04-19T20:20:44.229+08:00[Asia/Shanghai],2022-04-20T20:20:44.229+08:00[Asia/Shanghai]
            # Cookie Route Predicate,请求要有cookie,名字和值要跟下面一样
            - Cookie=username,abc
            # Header Route Predicate,请求头要有X-Request-Id,值要是整数
#            - Header=X-Request-Id,\d+
            # Host Route Predicate,接收请求后缀为haha.com 的请求域名访问
            - Host=**.haha.com
            # Method Route Predicate,求请求方式是get
            - Method=Get,Post
            # Query Route Predicate,请求中有参数username,且值是整数,才路由
            - Query=username,\d+


eureka:
  instance:
    hostname: cloud-gateway-service
  client: #服务提供者provider注册进eureka服务列表内
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka

可以使用postman测试或者使用cmd命令窗口的curl命令测试

返回结果中有中文乱码自己百度我没乱码

posted @ 2022-05-05 14:37  优质水  阅读(71)  评论(0)    收藏  举报