Spring Cloud Gateway应用详解1之谓词

环境:springboot2.3.7 + spring cloud Hoxton.SR9

Spring Cloud Gateway工作流程:

Spring Cloud Gateway应用详解1之谓词

 

客户端调用spring cloud gateway配置的请求。根据配置的映射确定请求与路由,将其发送到网关Web处理程序。此处理程序通过特定于请求的过滤器运行请求。过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和之后运行逻辑。执行所有“pre”过滤器逻辑。然后发出代理请求。在发出代理请求之后,运行“post”过滤器逻辑。

一. 路由谓词

  1. After 路由谓词工厂
    作用:After 谓词工厂接受一个参数datetime(它是java ZonedDateTime)。此谓词匹配在指定日期时间之后发生的请求。以下示例配置After Route谓词:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: after_route
        uri: https://www.baidu.com
        predicates:
        - After=2021-01-10T17:42:47.789-07:00  

所有的请求必须在
2021-01-10T17:42:47.789-07:00之后才能访问。当超过当前配置的这个时间,请求会返回404。

测试:

当前时间:2021-01-11 17:09

After=2021-01-10T17:42:47.789-07:00

Spring Cloud Gateway应用详解1之谓词

 

正常调整到了页面:

设置:

After=2021-01-20T17:42:47.789-07:00

Spring Cloud Gateway应用详解1之谓词

 

  1. Before 路由谓词工厂
    作用:Before 谓词工厂接受一个参数datetime(它是java ZonedDateTime)。此谓词匹配在指定日期时间之前发生的请求。以下示例配置Before Route谓词:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: before_route
        uri: https://www.qq.com
        predicates:
        - Before=2021-01-10T17:42:47.789-07:00

运行结果与After正好相反。

  1. Between 路由谓词工厂
    作用:Between谓词工厂接受两个参数datetime(它是java ZonedDateTime)。此谓词匹配请求必须在两个日期之间发生。以下示例配置Between Route谓词:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: between_route
        uri: https://www.163.com
        predicates:
        - Between=2021-01-01T17:42:47, 2021-01-10T17:42:47

请求必须位于2021-01-01T17:42:47到2021-01-10T17:42:47之间,如果超过这个日期范围返回

404。

失败:

配置:Between=2021-01-01T17:42:47, 2021-01-10T17:42:47

Spring Cloud Gateway应用详解1之谓词

 

  1. Cookie 路由谓词工厂
    作用:只有网关请求中包含指定的cookie 才能匹配,否则404。以下示例配置Cookie Route谓词:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: cookie_route
        uri: https://www.baidu.com
        predicates:
        - Cookie=code,testiptv255

当请求header中包含的Cookie中包含name为code,值为testiptv255时,请求才能被匹配。

示例:

Spring Cloud Gateway应用详解1之谓词

 

当不包含name为code的cookie时请求返回404。

  1. Header 路由谓词工厂

作用:当请求中包含指定的Header信息时,请求才能匹配。以下示例配置Header Route谓词:

spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: header_route
        uri: https://www.baidu.com
        predicates:
        - Header=Host,localhost:20000

当网关请求Header中包含Host请求头,并且值为localhost:20000,请求才会被匹配。

示例:

Spring Cloud Gateway应用详解1之谓词

 

  1. Host 路由谓词工厂

作用:当请求Header中的Host头信息为配置中的列表中,那么网关将被匹配。以下示例配置Host Route谓词:

spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: host_route
        uri: https://www.baidu.com
        predicates:
        - Host=**.xg.com,localhost:20000

当请求Header中的Host取值为:www.xg.com或者xxx.xg.com或者localhost:20000时路由将被匹配:

示例:

Spring Cloud Gateway应用详解1之谓词

 

  1. Method 路由谓词工厂

作用:当请求是指定的Method时,路由将被匹配。以下示例配置Method Route谓词:

spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: method_route
        uri: https://www.baidu.com
        predicates:
        - Method=GET,POST

当请求是GET或者是POST请求时,网关路由将会被匹配。

示例:

Spring Cloud Gateway应用详解1之谓词

 

  1. Path 路由谓词工厂

作用:当请求的路径为指定的Path时,路由将会被匹配。以下示例配置Path Route谓词:

spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: path_route
        uri: https://www.baidu.com
        predicates:
        - Path=/api-a/{segment},/api-1/{segment}

当请求的地址为:http://xxx/api-a/xxx或者是http://xxx/api-1/xxx时,路由将会被匹配;注意:你的目标地址应该有/api-a/xxx和/api-1/xxx这两个请求地址。

示例:

Spring Cloud Gateway应用详解1之谓词

 

页面显示的404是因为
http://www.baidu.com/api-a/1没有这样的请求地址是baidu返回的404,并不是我们服务器返回的404错误。

  1. Query 路由谓词工厂

作用:当请求中包含指定的查询参数或者是包含指定的查询参数及值时才匹配路由。以下示例配置Query Route谓词:

1、方式1:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: query_route
        uri: https://www.baidu.com
        predicates:
        - Query=name
2、方式2:
spring:
  cloud:
    gateway:
      enabled: true
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
      routes:
      - id: query_route
        uri: https://www.baidu.com
        predicates:
        - Query=name,admin

方式1:当请求中只要包含name参数即可。

Spring Cloud Gateway应用详解1之谓词

 

方式2:当请求中包含name参数名并且值为admin时匹配路由。

Spring Cloud Gateway应用详解1之谓词

 

当值非admin时返回404。

下节:《Spring Cloud Gateway应用详解2之Filter》

关注+转发谢谢

Springboot整合RabbitMQ延迟队列&优先级队列详解

课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页高清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值