SpringCloud Gateway--Predicate/断言(详细介绍)上

前言
本篇博文是关于SpringCloud Gateway–Predicate/断言(详细介绍)上,希望你能够喜欢

个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力

欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦

文章目录

  • SpringCloud Gateway
    • Predicate/断言
      • 基本介绍
        • Route Predicate Factories
          • 文档地址:
          • 解读
      • Route Predicate 实例
        • After Route Predicate
          • 需求分析
          • 代码实现
          • 测试
        • Before Route Predicate
          • 需求分析/图解
          • 代码实现
          • 测试
        • Between Route Predicate
          • 需求分析/图解
          • 代码实现
          • 测试

SpringCloud Gateway

Predicate/断言

基本介绍

说明: Predicate 就是一组匹配规则,当请求匹配成功,就执行对应的Route, 匹配失败,放弃处理/转发

Route Predicate Factories
文档地址:

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

SpringCloud Gateway--Predicate/断言(详细介绍)上_第1张图片

解读
  1. Spring Cloud Gateway包括许多内置的Route Predicate工厂, 所有这些Predicate都与HTTP请求的不同属性匹配, 可以组合使用.
  2. Spring Cloud Gateway 创建Route 对象时,使用RoutePredicateFactory 创建Predicate对象,Predicate 对象可以赋值给Route。
  3. 所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合

Route Predicate 实例

After Route Predicate
需求分析
  1. 需求: 只有2022-11-18 12:35:50 之后的请求才进行匹配/转发, 不满足该条件的,不处理
代码实现
  1. 参考文档:
    https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

SpringCloud Gateway--Predicate/断言(详细介绍)上_第2张图片

  1. 修改e-commerce-gateway-20000 的application.yml
      routes: #配置路由,可以配置多个路由 List routes
        - id: member_route01 #路由的id, 程序员自己配置,要求唯一
          #gateway 最终访问的url 是 url=uri+Path
          #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
          #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
          #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
          #如果匹配失败, 则有gateway返回404信息
          #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
          #     配置,就会使用到Eureka Server
          #uri: http://localhost:10000
          #解读
          #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
          #2. 默认情况下,负载均衡算法是轮询
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            - Path=/member/get/**
            - After=2022-11-18T12:35:50.387+08:00[Asia/Shanghai]
        - id: member_route02 #路由的id, 程序员自己配置,要求唯一
          #uri: http://localhost:10000
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
            #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
            - Path=/member/save
  1. 如何获取时间格式, 创建一个测试类,来获取当前时间,再根据需要修改src/java/test/com/my/springcloud/T1.java
public class T1 {
    public static void main(String[] args) {
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);
    }
}
测试

启动e-commerce-eureka-server-9001
启动member-service-provider-10000/10002
启动e-commerce-gateway-20000
浏览器:(通过网关访问) http://localhost:20000/member/get/1

SpringCloud Gateway--Predicate/断言(详细介绍)上_第3张图片

Before Route Predicate
需求分析/图解
  1. 需求: 只有2022-11-18 12:35:50 之前的请求才进行匹配/转发, 不满足该条件的,不处理
代码实现
  1. 参考文档:
    https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

SpringCloud Gateway--Predicate/断言(详细介绍)上_第4张图片

  1. 修改e-commerce-gateway-20000 的application.yml
      routes: #配置路由,可以配置多个路由 List routes
        - id: member_route01 #路由的id, 程序员自己配置,要求唯一
          #gateway 最终访问的url 是 url=uri+Path
          #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
          #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
          #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
          #如果匹配失败, 则有gateway返回404信息
          #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
          #     配置,就会使用到Eureka Server
          #uri: http://localhost:10000
          #解读
          #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
          #2. 默认情况下,负载均衡算法是轮询
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            - Path=/member/get/**
            #- After=2022-11-18T12:35:50.387+08:00[Asia/Shanghai]
            - Before=2022-11-18T12:35:50.387+08:00[Asia/Shanghai]
        - id: member_route02 #路由的id, 程序员自己配置,要求唯一
          #uri: http://localhost:10000
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
            #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
            - Path=/member/save
测试

启动e-commerce-eureka-server-9001
启动member-service-provider-10000/10002
启动e-commerce-gateway-20000
浏览器:(通过网关访问) http://localhost:20000/member/get/1

SpringCloud Gateway--Predicate/断言(详细介绍)上_第5张图片

Between Route Predicate
需求分析/图解
  1. 需求: 只有2020-11-18 12:35:50 和2022-11-18 12:35:50 之间的请求才进行匹配/转发, 不满足该条件的,不处理
代码实现
  1. 参考文档:
    https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories

SpringCloud Gateway--Predicate/断言(详细介绍)上_第6张图片

  1. 修改e-commerce-gateway-20000 的application.yml
      routes: #配置路由,可以配置多个路由 List routes
        - id: member_route01 #路由的id, 程序员自己配置,要求唯一
          #gateway 最终访问的url 是 url=uri+Path
          #匹配后提供服务的路由地址: 也可以是外网 http://www.baidu.com
          #比如: 客户端/浏览器请求 url http://localhost:20000/member/get/1
          #如果根据Path匹配成功 最终访问的url/转发url 就是 url=http://localhost:10000/member/get/1
          #如果匹配失败, 则有gateway返回404信息
          #疑问: 这里配置的 uri 是固定,在当前这种情况其实可以没有有Eureka Server,后面会使用灵活方式
          #     配置,就会使用到Eureka Server
          #uri: http://localhost:10000
          #解读
          #1. lb: 协议名 , member-service-provider 注册到eureka server 服务名(小写)
          #2. 默认情况下,负载均衡算法是轮询
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            - Path=/member/get/**
            - Between=2020-11-18T12:35:50.387+08:00[Asia/Shanghai],2022-11-18T12:35:50.387+0
8:00[Asia/Shanghai]
        - id: member_route02 #路由的id, 程序员自己配置,要求唯一
          #uri: http://localhost:10000
          uri: lb://member-service-provider
          predicates: #断言,可以有多种形式
            #这时如果客户端/浏览器 访问gateway 的url http://localhost:20000/member/save
            #匹配Path成功 最终访问的url 就是 http://localhost:10000/member/save
            - Path=/member/save
测试

启动e-commerce-eureka-server-9001
启动member-service-provider-10000/10002
启动e-commerce-gateway-20000
浏览器:(通过网关访问) http://localhost:20000/member/get/1

SpringCloud Gateway--Predicate/断言(详细介绍)上_第7张图片

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力

你可能感兴趣的:(Spring,Cloud,spring,cloud,gateway,spring)