欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud GateWay 路由转发规则介绍

程序员文章站 2022-07-14 23:05:25
...

在我们开始本章内容之前我们要来先了解下Spring Cloud Gateway内部提供的所有谓语、断言,这样我们才能目标性的进行学习,我截了一张官网的图,如下所示:

Spring Cloud GateWay 路由转发规则介绍

 

每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。

我们在application.yml配置文件内添加对应的路由配置,如下所示:

server:
  port: 9521
spring:
  application:
    name: service-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 5fc9fa35-871d-499a-91f0-dd0ceacbd978
    gateway:
      routes:
        - id: nacos-consumer
          uri: lb://nacos-consumer
          predicates:
            - Path=/consumer/**

 

先来解释下route的组成部分:

  • id:路由的ID , 可以随意填写,但是不要重复
  • uri:匹配路由的转发地址 , lb代表使用注册中心的服务名称作为路由
  • predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置,predicate为true才会进行路由

 

当访问http://localhost:9521/consumer 后就会被路由到nacos-consumer服务之上

 

predicate断言的参数

Before 方式匹配转发

当部署有访问时间限制的接口时,我们可以通过Before Predicate来完成某一个时间点之前允许访问,过时后则不允许转发请求到具体的服务,配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: xxxx
          predicates:
            - Before=2019-05-01T00:00:00+08:00[Asia/Shanghai]

 

After 方式匹配转发

After PredicateBefore配置使用一致,匹配某一个时间点之后允许路由转发,如下所示配置:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: xxxx
          predicates:
            - After=2019-04-29T00:00:00+08:00[Asia/Shanghai]

在上面配置中允许2019-04-29凌晨之后进行转发到xxxxx。 

 

Between 方式匹配转发

那如果是一个时间段内允许请求转发,通过BeforeAfter组合配置也可以完成,不过Spring Cloud Gateway还是提供了Between方式,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: xxxx
          predicates:
            - Between=2019-04-29T00:00:00+08:00[Asia/Shanghai], 2019-05-01T00:00:00+08:00[Asia/Shanghai]

 

在上面配置中,允许在2019-04-29日凌晨后 & 2019-05-01凌晨之前请求转发到xxxxx

 

Cookie 方式匹配转发

Spring Cloud Gateway 还提供了根据Cookie值的方式匹配转发请求,如果请求中所携带的Cookie值与配置的Predicate匹配,那么就可以被允许转发到指定地址,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri:xxxx
          predicates:
            - Cookie=name, zhansgan

在上面配置中,如果客户端发送请求时携带了"hengboy=yuqiyu"的Cookie信息,则允许请求转发。

 

Header 方式匹配转发

Spring Cloud Gateway可以根据发送请求的Header信息进行匹配转发,加入我们可以根据X-Request-Id的值进行匹配,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: xxxx
          predicates:
            - Header=X-Request-Id, \d+

 

 如果头信息为X-Request-Id:abc时,就会转发失败,出现404。

 

Host 方式匹配转发

Spring Cloud Gateway可以根据Host主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com域名进行访问,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: xxxxx
          predicates:
            - Host=**.zhansgan.com

 

相关标签: springcloud