1. 作用
API Gateway,它作为所有外部请求的唯一入口,承担统一路由、安全鉴权、流量限流、监控埋点等横切职责,是微服务架构的 "门面" 与 "流量中枢"。由于微服务的应用可能部署在不同的地方,此时有了网关,客户端相关的请求直接发送到网关,由网关根据请求标识解析判断出具体的微服务地址,再把请求转发到微服务实例。
2. 核心工作原理与流程
Gateway 的请求处理流程可概括为 "接收→匹配→过滤→转发→响应",核心依赖三大组件:
| 核心组件 | 作用 | 关键说明 |
|---|---|---|
| 路由 (Route) | 网关的基本单元 | 包含 ID、目标 URI、断言集合、过滤器集合,定义请求转发规则 |
| 断言(Predicate) | 路由匹配规则 | 基于 HTTP 请求的路径、请求头、方法、时间等条件判断是否匹配路由 |
| 过滤器 (Filter) | 请求 / 响应处理 | 分为全局过滤器 (所有请求生效)和局部过滤器(指定路由生效),可在请求前(Pre)或响应后(Post)执行逻辑 |
完整请求流程:客户端请求 → Netty 接收 → 路由断言匹配 → 过滤器链执行(Pre) → 转发至目标微服务 → 过滤器链执行(Post) → 响应返回客户端。
在spring cloud gateway中配置uri有三种方式,包括
- websocket配置方式
bash
spring:
cloud:
gateway:
routes:
- id: ruoyi-api
uri: ws://localhost:9090/
predicates:
- Path=/api/**
- http地址配置方式
bash
spring:
cloud:
gateway:
routes:
- id: ruoyi-api
uri: http://localhost:9090/
predicates:
- 注册中心配置方式
bash
spring:
cloud:
gateway:
routes:
- id: ruoyi-api
uri: lb://ruoyi-api
predicates:
- Path=/api/**
3. 示例
bash
spring:
cloud:
gateway:
# 动态路由:从 Nacos 注册中心获取服务列表
discovery:
locator:
enabled: true # 开启服务发现路由
# 自定义路由规则
routes:
- id: system-service-route
uri: lb://ruoyi-system # 指向 Nacos 中的系统服务
predicates:
- Path=/system/** # 匹配 /system 开头的请求
filters:
- StripPrefix=1 # 去除路径前缀(将 /system/user 转为 /user)
- name: RequestRateLimiter # 限流过滤器
args:
redis-rate-limiter.replenishRate: 10 # 每秒生成令牌数
redis-rate-limiter.burstCapacity: 20 # 令牌桶容量