Gateway的路由机制

Spring Cloud Gateway 是 Spring 微服务体系中的 API 网关组件,主要作用是对微服务的请求进行统一路由、限流、认证、监控、日志记录等处理。其中,路由机制是 Gateway 的核心功能之一,控制了外部请求如何转发到内部服务。

下面我会从整体架构、路由定义方式、匹配流程、执行机制、关键组件和高级功能这几个方面,详细讲解 Spring Cloud Gateway 的路由机制。


🧱 一、Spring Cloud Gateway 路由机制总览

**路由(Route)**定义了一个请求的匹配规则(谓词 Predicate)以及对应的目标地址(URI)和过滤器链(Filters)。

路由 = 请求匹配 + 请求转发 + 过滤器处理

- id: order_route
  uri: http://localhost:8081
  predicates:
    - Path=/order/**
  filters:
    - StripPrefix=1

🔍 二、路由机制核心组成

组件作用
RouteDefinition路由定义:包括 ID、Predicates(匹配条件)、URI(目标地址)、Filters(过滤器)
RouteLocator路由查找器:从配置或数据库中加载 RouteDefinition
Predicate路由匹配条件,如 Path、Method、Header、Host 等
Filter请求处理器链,对请求进行预处理或后处理(如认证、限流、日志)
GatewayHandlerMapping核心分发器:根据 Predicate 匹配路由
GatewayWebHandler真正处理请求并执行过滤器链,转发请求到目标服务


🧭 三、路由匹配与转发流程(图解逻辑)

         [请求进入]
              ↓
   GatewayHandlerMapping 匹配 Predicate
              ↓
     RouteLocator 查找所有匹配 Route
              ↓
   构造过滤器链 GatewayFilterChain
              ↓
     GatewayWebHandler 执行 filter 链
              ↓
         请求转发到 URI

🧪 四、常用 Predicate 匹配规则

Predicate示例说明
Path/api/**路径匹配
MethodGET, POST请求方法
Host**.example.com域名匹配
Header"X-Request-Id", \d+请求头匹配
Query"foo", "bar"请求参数匹配
After, Before, Between时间范围
RemoteAddr192.168.1.1/24IP 白名单控制

🧰 五、常用 Filter 功能说明

Filter功能
AddRequestHeader添加请求头
StripPrefix去除请求路径前缀
RequestRateLimiter限流
Retry自动重试
CircuitBreaker熔断
RedirectTo重定向
自定义 Filter实现 GatewayFilter 接口

🧾 六、支持的路由定义方式

✅ 1. 配置文件方式(推荐 YAML)

spring:
  cloud:
    gateway:
      routes:
        - id: user_route
          uri: http://localhost:8081
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1

✅ 2. Java 编码方式(RouteLocatorBuilder)

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  return builder.routes()
    .route("user_route", r -> r.path("/user/**")
        .uri("http://localhost:8081")
        .filters(f -> f.stripPrefix(1)))
    .build();
}

✅ 3. 动态方式(数据库 / Nacos 注册中心)

  • 自定义 RouteDefinitionRepository

  • 动态加载路由配置并热更新(适合大规模微服务网关)


🚦 七、动态路由 & 刷新机制

Spring Cloud Gateway 支持 动态路由热更新

  • 调用 /actuator/gateway/refresh 可以刷新路由缓存(需开启 Spring Boot Actuator)

  • 如果是基于 Nacos、Redis 等动态路由源,也可以监听配置变更自动更新


🧠 八、路由机制关键面试点总结

问题要点
Gateway 如何进行请求路由?GatewayHandlerMapping 根据 RouteDefinition 中的 Predicate 匹配请求
如何实现动态路由?实现 RouteDefinitionLocator + Refresh Endpoint
Predicate 支持哪些类型?Path、Method、Header、Query、Host 等
Filter 的作用是?实现请求处理的逻辑链,如认证、限流、日志、重试、Header 修改等
与 Zuul 区别?Zuul 1.x 基于 Servlet,Gateway 基于 Netty,性能更高,响应更快


📌 九、总结一句话

Spring Cloud Gateway 的路由机制 = 路由定义 + 谓词匹配 + 过滤器处理 + 目标服务转发,它是微服务架构中统一流量入口和控制逻辑的核心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值