SpringCloud Gateway网关微服务实现动态路由功能
如何将自己的网关微服务从静态路由修改实现动态路由功能
0 什么是网关的动态路由
动态路由 = 网关不用重启,不用改 yml,就能实时从注册中心 / 配置中心拿到最新的路由规则。
静态路由 vs 动态路由
| 特性 | 静态路由(Static Route) | 动态路由(Dynamic Route) |
|---|---|---|
| 配置方式 | 写死在 gateway.yml | 从 Nacos/Consul/数据库实时读取 |
| 变更方式 | 必须重启网关 | 变更后 立刻生效,无需重启 |
| 适用场景 | 路由很少改变 | 微服务频繁扩缩容、上线下架 |
| 故障恢复 | 手动改配置 | 自动感知服务上线/下线 |
1 删除/注释 gateway 本地的静态 routes
你当前的 bootstrap.yml 中应该有类似内容:
1 | |
把整个 spring.cloud.gateway.routes 注释或删除:
1 | |
因为路由将从 Nacos 加载。
2 在 bootstrap.yml 增加动态路由的 Nacos 配置引入
在 bootstrap.yml 添加以下内容(要放到 spring.config.import 下):
1 | |
注意:gateway-routes.yaml 是你即将创建的 Nacos 配置文件。
3 在 Nacos 中创建动态路由文件 gateway-routes.yaml
Nacos ➝ 配置管理 ➝ 新建配置
| 项目 | 内容 |
|---|---|
| Data ID | gateway-routes.yaml |
| Group | DEFAULT_GROUP |
| 格式 | YAML |
写入如下内容:
1 | |
4 开启自动刷新配置(你已实现)
在这个类依赖 Nacos 的配置,并且希望在不重启应用的情况下让配置生效,就必须加 @RefreshScope。
1 | |
例如:
1 | |
5 最终实现
路由文件 gateway-routes.yaml 修改 → 网关立即刷新