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/** | 路径匹配 |
Method | GET, POST | 请求方法 |
Host | **.example.com | 域名匹配 |
Header | "X-Request-Id", \d+ | 请求头匹配 |
Query | "foo", "bar" | 请求参数匹配 |
After , Before , Between | 时间范围 | |
RemoteAddr | 192.168.1.1/24 | IP 白名单控制 |
🧰 五、常用 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 的路由机制 =
路由定义
+谓词匹配
+过滤器处理
+目标服务转发
,它是微服务架构中统一流量入口和控制逻辑的核心。