一。环境准备与说明

1.网关子模块的application.yml配置文件如下:

eureka:
  client:
    serviceUrl:
      #服务注册地址
      defaultZone: http://localhost:8088/eureka/
  instance:
    #服务实例名称
    instance-id: gateway-9527
    #是否暴露服务ip地址
    prefer-ip-address: true
server:
  #运行端口
  port: 9527
spring:
  application:
    #服务注册名称
    name: service-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
      routes:
        - id: service-provider-getNumber # 路由的id,没有规定规则但要求唯一,建议配合服务名
          #匹配后提供服务的路由地址
#          uri: http://localhost:8001
          uri: lb://service-provider #匹配后提供服务的路由地址
          predicates:
            - Path=/provider/getNumber/** # 断言,路径相匹配的进行路由(注意**为通配符)
        - id: service-provider-getInfo
#          uri: http://localhost:8001
          uri: lb://service-provider #匹配后提供服务的路由地址
          predicates:
            - Path=/provider/getInfo  #断言,路径相匹配的进行路由
#            - After=2020-10-30T15:00:22.432+08:00[Asia/Shanghai] #在该时区后发生
#            - Before=2020-10-30T16:00:22.432+08:00[Asia/Shanghai] #在该时区前发生
#            - Between=2020-10-30T15:00:22.432+08:00[Asia/Shanghai],2020-10-30T16:00:22.432+08:00[Asia/Shanghai] #在两个时区内发生
#            - Cookie=username,lisi #携带cookies信息,相当于键值对,username为key,lisi为value
#            - Cookie=username,\d+ #携带cookies信息,相当于键值对,username为key,\d+为value,是一个正则表达式,表达为正数
#            - Header=id,001 #携带header信息,相当于键值对,id为key,001为value
#            - Header=id,\d+ #携带header信息,相当于键值对,id为key,\d+为value,是一个正则表达式,表达为正数
#            - Host=**.somehost.org,**.anotherhost.org #host匹配,**为通配符
#            - Method=GET,POST #允许的请求方法
#            - Query=number,abc #带查询条件,第一个是查询参数,第二个是可选的值
#            - Query=number,\d+ #带查询条件,第一个是查询参数,第二个是可选的正则表达式

2.服务提供端8001控制器代码如下:

在这里插入图片描述
3.curl是什么?

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,http请求指的是客户端向服务端的请求消息,http请求主要分为get或post请求两种,在linux测试环境中,可以通过curl或wget命令和模拟http请求。通俗的来说就是类似于postman接口工具一样能够发送接口请求。

二。predicates的九种常用配置方式

1.-Path

path是断言最常见的方式,它主要是通过路径来控制是否通过并进行路由访问。

application.xml配置图如下:

在这里插入图片描述
启动服务并通过curl访问,符合路径规则成功访问,否则访问失败:

在这里插入图片描述

2.-After:

after后跟的是一个时区时间,表示的是当前系统时间要在该时区时间后,才能通过并进行路由访问。

我们先建立一个输出当前时区时间的测试类:

public class test {

    public static void main(String[] args) {
        ZonedDateTime zonedDateTime=ZonedDateTime.now();
        //输出时区时间
        System.out.println(zonedDateTime);
    }
}

输出如下:

在这里插入图片描述
所以我们在application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,符合要求访问成功:

在这里插入图片描述

3.-Before:

before和after一样,后面跟的也是一个时区时间,表示的是当前系统时间要在该时区时间前,才能通过并进行路由访问。

application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,符合要求访问成功:

在这里插入图片描述

4.-Between:

between后面跟的也是时区时间,但是参数为两个,第一个参数为更早一点的时间,第二个参数为更晚一点的时间,中间用逗号隔开,表示的是当前系统时间要在这两个时区时间内,才能通过并进行路由访问。

application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,符合要求访问成功:

在这里插入图片描述

5.-Cookie:

带cookie信息,后面跟两个参数,相当于键值对,第一个参数为key,第二个参数为value,第二个参数可以是字符串或者是正则表达式。

当value为字符串时,application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,带有cookie信息username=lisi成功访问,否则访问失败:

在这里插入图片描述
当value为正则表达式时,application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,带有cookie信息username的值为正数成功访问,否则访问失败:

在这里插入图片描述

6.-Header:

带header头信息,后面跟两个参数,相当于键值对,第一个参数为key,第二个参数为value,第二个参数可以是字符串或者是正则表达式。

当value为字符串时,application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,带有header信息id:001成功访问,否则访问失败:

在这里插入图片描述

当value为正则表达式时,application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,带有header信息id为正数成功访问,否则访问失败:

在这里插入图片描述

7.-Host:

带host信息,参数为主机地址,可带多个参数,中间用逗号隔开,若匹配才能通过并进行路由访问。

application.yml文件中配置如下:

在这里插入图片描述
启动服务并通过curl访问,符合host主机地址匹配的成功访问,否则访问失败:

在这里插入图片描述

8.-Method:

规定请求方式,参数为请求方式,可带多个请求方式,中间用逗号隔开。

application.yml文件中配置如下:

在这里插入图片描述

启动服务并通过curl访问,符合规定的请求方式访问成功,否则访问失败:

在这里插入图片描述

9.-Query:

带查询条件,后面跟一个或者两个参数,参数为两个时相当于键值对,第一个参数为key,第二个参数为value,第二个参数可以是字符串或者是正则表达式。

当value为字符串时,application.yml文件中配置如下:

在这里插入图片描述

启动服务并通过curl访问,符合查询条件number=abc则访问成功,否则访问失败:

在这里插入图片描述

当value为正则表达式时,application.yml文件中配置如下:

在这里插入图片描述

启动服务并通过curl访问,符合查询条件number为正数则访问成功,否则访问失败:

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐