Gateway—时间谓词

概述

业务系统会经常性的随着业务的变更而频率的迭代,随着开发工作的完成,系统会在某个时间点或时间段内进行升级。而此时,我们肯定不希望用户在我们更新的时间里访问服务器。那么,这个时候我们就可以使用时间相关的谓词工厂来解决这个问题。

时间格式

在这些时间谓词中,时间可以是ZoneDateTime的格式,或者是时间的毫秒数。我们可以通过下面的方式获取指定的时间格式。

ZoneDateTime格式:

LocalDateTime localDateTime = LocalDateTime.of(2022,11,13,19,0,0);
ZonedDateTime after = ZonedDateTime.of(localDateTime,ZoneId.of(zoneString));

System.out.println(after);

上面的输出结果为:2022-11-17T19:00+08:00[Asia/Shanghai]

时间毫秒数格式:

LocalDateTime localDateTime = LocalDateTime.of(2022,11,17,19,0,0);
ZonedDateTime after = ZonedDateTime.of(localDateTime,ZoneId.of(zoneString));
long e = after.toInstant().toEpochMilli();

System.out.println(e);

上面的输出结果为:1668682800000

After

After路由谓词工厂接受一个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。它匹配指定时间以后发生的请求,这些请求会被路由到指定uri。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://www.baidu.com/
        predicates:
        # - After=2022-11-17T19:00+08:00[Asia/Shanghai]
        - After=1668682800000

Before

Before和After正好相反。路由谓词工厂接受一个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。它匹配指定时间之前发生的请求,这些请求会被路由到指定uri。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://www.baidu.com/
        predicates:
        # - Before=2022-11-17T19:00+08:00[Asia/Shanghai]
        - Before=1668682800000

Between

Between路由谓词工厂接受两个时间类型的参数,时间格式可以是ZoneDateTime或时间毫秒数。两个时间参数设置在一行,中间用逗号隔开。前一个参数我们暂时称为datetime1,后一个参数我们称为datetime2。它匹配发生成datetime1以后,datetime2以前的请求,这些请求会被路由到指定uri。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://www.baidu.com/
        predicates:
        # - Before=2022-11-17T19:00+08:00[Asia/Shanghai],2022-11-17T19:00+08:00[Asia/Shanghai]
        - Between=1668684000000,1668684180000

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注