spring cloud gateway路由转发核心是route、predicate、filter三要素协同:route定义id与uri,predicate按路径/方法/头等条件匹配请求(全满足才触发),filter在转发前后处理请求或响应。

Spring Cloud Gateway 实现路由转发,核心是定义“什么请求 → 转到哪里 → 怎么处理”。它不靠硬编码跳转,而是通过声明式配置(YAML 或 Java DSL)把规则说清楚,网关自动匹配、过滤、转发。关键不在写多少代码,而在理解 Route(路由)、Predicate(断言)、Filter(过滤器) 这三要素怎么协同工作。
路由转发靠三个组件配合
每个路由规则必须包含以下部分,缺一不可:
-
ID:唯一标识,比如
user-service-route,用于日志、监控和动态刷新时定位 -
URI:目标地址,支持多种格式:
•lb://user-service(走注册中心 + 负载均衡,推荐微服务间调用)
•http://localhost:8081(直连固定地址,适合调试或三方接口)
•https://api.example.com(代理外部 HTTPS 服务) -
Predicate(断言):决定“这个请求是否归这条路管”。多个断言是 AND 关系,全部满足才匹配。
常见写法:
•Path=/api/users/**(路径前缀匹配)
•Method=GET,POST(限定 HTTP 方法)
•Header=X-Auth-Token(检查请求头是否存在)
•Host=**.company.com(按域名分流) -
Filter(过滤器):在转发前后做轻量改造,比如:
•StripPrefix=1:把/api/users/xxx的/api去掉再发给后端
•AddRequestHeader=X-Trace-ID, ${uuid}:加个唯一追踪 ID
•Retry=3:转发失败时重试 3 次(需配合状态码策略)
两种主流配置方式怎么选
实际项目中,推荐 YAML 配置为主,Java DSL 为辅 —— 更易维护、支持配置中心热更新。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
YAML 方式(推荐):写在
application.yml中,清晰直观,适合大多数场景
示例:spring:cloud:gateway:routes:- id: user-apiuri: lb://user-centerpredicates:- Path=/api/v1/users/**filters:- StripPrefix=3- AddRequestHeader=X-From-Gateway, true -
Java DSL 方式(适合动态/条件路由):用
@Bean返回RouteLocator,适合需要逻辑判断的场景,比如按时间、用户等级、IP 段分流
示例(只匹配白天流量):@Beanpublic RouteLocator customRoutes(RouteLocatorBuilder builder) {return builder.routes().route("daytime-user", r -> r.path("/api/users/**").and().before(LocalDateTime.now().withHour(18)).uri("lb://user-day")).build();}
转发过程其实就四步
你不需要手动写转发逻辑,网关内部自动执行:
- 请求进来,先解析路径、头、参数等原始信息
- 挨个比对所有路由的 Predicate,找到第一个全部匹配的路由(顺序重要!建议把精确路径放前面)
- 按顺序执行该路由配置的 Filter(前置 → 转发 → 后置)
- 把处理后的请求,用非阻塞 I/O 发送给 URI 对应的服务,再把响应原路返回
常见问题怎么快速定位
转发失败?先看这三点:
-
404 Not Found:大概率是
Path断言没匹配上,检查请求路径是否带了前缀(如网关配了/api/**,但你访问的是/users);或uri写错(比如漏了lb://导致直连失败) -
503 Service Unavailable:后端服务没注册到 Eureka/Nacos,或健康检查失败;也可能是
lb://xxx中的xxx和注册中心里的服务名大小写/拼写不一致 -
请求头丢失 / 路径异常:确认
StripPrefix数值是否正确(StripPrefix=2会去掉前两级,比如/api/v1/users→/users);也可临时加SetStatus=200过滤器测试是否走到这一步
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










