GateWay路由规则

SpringCloudGateway路由策略:基于时间、Header、Cookie等条件的动态匹配,

Spring Cloud GateWay 帮我们内置了很多 Predicates功能,实现了各种路由匹配规
则(通过 Header、请求参数等作为条件)匹配到对应的路由

1 时间点后匹配 

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - After=2023-03-18T17:42:47.789-07:00[America/Denver]

2 时间点前匹配 

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Before=2025-03-18T17:42:47.789+08:00[Asia/Shanghai]

3 时间区间匹配

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Between=2022-03-18T17:42:47.789+08:00[Asia/Shanghai],2025-03-18T17:42:47.789+08:00[Asia/Shanghai]

4 指定Cookie正则匹配指定值

这个配置的含义是当接收到的请求中包含名为 sessionId 的 Cookie,且其值匹配正则表达式 \d+(表示任意数字)时,该请求将被路由到 http://example.org。换句话说,这个规则会筛选出带有特定 Cookie 值的请求,并将其转发到指定的 URI。

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Cookie=sessionId, \d+

5 指定Header正则匹配指定值

这个配置指定了一个名为 consumer 的路由,它将请求转发到 https://consumer-service 服务上。该路由的谓词条件是请求头中的 requestinfo 的值必须是一个数字。

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Header=requestinfo, \d+

6 请求Host匹配指定值

这个配置定义了一个名为 consumer 的路由,它将请求转发到 https://consumer-service 服务上。该路由的谓词条件是请求的 Host 头必须匹配 **.consumer-service.** 的正则表达式模式。

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Host=**.consumer-service.**

7 请求Method匹配指定请求方式

指定请求类型是get 或者让post请求

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Method=GET,POST

8 请求路径正则匹配

这个配置中的 Path=/consumer-service/** 表示当请求的路径以 /consumer-service/ 开头时,将请求转发到 https://consumer-service 服务上

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Path=/consumer-service/**

9 请求包含某参数

在这个配置中,使用了 Query 谓词来匹配请求中的查询参数。具体来说,Query=name 表示只有请求中带有名为 name 的查询参数时,该路由规则才会被匹配。这意味着只有符合该条件的请求会被转发到 https://consumer-service 服务。

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - Query=name

10 远程地址匹配

在这个配置中,使用了 RemoteAddr 谓词来匹配请求的远程地址。具体来说,RemoteAddr=http://192.168.201.116 表示只有来自远程地址为 192.168.201.116 的请求才会被匹配到该路由规则。这意味着只有符合该条件的请求会被转发到 https://consumer-service 服务。

server:
  port: 8888
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: consumer
          uri: https://consumer-service
          predicates:
            - RemoteAddr=192.168.201.116

### 配置 Gateway 网关的路由规则 在 Spring Cloud Gateway 中,可以通过多种方式来配置网关的路由规则。这些规则决定了请求如何被转发到不同的后端服务。 #### 使用 YAML 文件静态配置路由规则 最简单的方式是在 `application.yml` 或者 `application.properties` 文件中直接定义路由规则: ```yaml spring: cloud: gateway: routes: - id: baidu_route uri: https://www.baidu.com/ predicates: - Path=/baidu/** ``` 这段代码表示当路径以 `/baidu/` 开头时,所有的请求都会被重定向至百度网站[^1]。 对于更复杂的场景,则可能涉及到动态加载路由规则或者基于特定条件(比如 HTTP 方法、头部信息等)进行过滤和处理。 #### 动态配置路由规则 为了支持更加灵活的应用需求,还可以采用编程的方式来创建并注册新的 Route 对象实例。这通常涉及到了解 `RouteDefinitionLocator` 和 `RouteDefinitionWriter` 接口的功能,并利用它们所提供的 API 来操作路由表单中的数据记录。 例如,在某些情况下希望根据数据库存储的信息来自动生成相应的路由条目;此时就可以编写一段 Java 逻辑读取外部资源文件或查询关系型数据库获取必要的参数值用于初始化一个新的 Route 实体对象,再将其提交给容器管理以便即时生效[^2]。 此外,Spring Cloud Gateway 提供了一系列预构建好的 Predicate 工厂类,允许开发者轻松指定诸如 URI 模式匹配、HTTP 请求方法限定之类的约束条件,从而进一步增强了系统的可扩展性和易用性[^3]。 ```java @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/foo/**") .filters(f -> f.addRequestHeader("Foo", "Bar")) .uri("http://example.org")) .build(); } ``` 上述代码展示了如何通过编码的形式向应用程序引入额外的一组自定义化路由指令集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值