企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
**为什么要对gateway网关配置集中管理?** * 我们可以启动多个gateway网关实例,达到流量负载分流的效果。多个gateway实例可以使用nacos中的同一个配置文件。 * 修改配置文件中的路由配置项,影响所有的gateway网关实例,不用一个实例一个实例的修改。 ![](https://img.kancloud.cn/12/de/12dec2d8f4f88fae6ec859f0ffa9a32e_1227x623.png) ## 一、启动时从nacos加载路由配置 Spring Cloud Gateway启动时,就将yml配置文件中的路由配置和规则加载到内存里,使用InMemoryRouteDefinitionRepository来管理。配置文件的内容,我们可以放到nacos里面统一管理。 > 我们就把gateway当成一个普通的服务,我们之前在《alibaba-nacos》那一章怎么做的服务配置,就怎么做gateway配置。 * 通过maven引入nacos服务配置客户端 ~~~ <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ~~~ 将配置文件分成两份: * 新建项目本地boostrap.yml 配置应用的基础信息端口、名称及nacos discovery和config信息。 * 在nacos上新建zimug-server-gateway.yaml配置文件,并将gateway路由相关的配置信息放进去。这部分配置在nacos的集中管理。 本地boostrap.yml ~~~ server: port: 8777 spring: application: name: zimug-server-gateway cloud: nacos: discovery: server-addr: 192.168.161.6:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yaml group: ZIMUG_GROUP #配置分组,默认分组是DEFAULT_GROUP ~~~ Nacos上的zimug-server-gateway.yaml配置 ~~~ spring: cloud: gateway: discovery: locator: enabled: true routes: - id: rbsc-service uri: lb://aservice-rbac predicates: - name: RbacAuth args: flag: rbac filters: - name: IPForbid args: permitIp: 127.0.0.1 ~~~ 路由配置中仍然包含我们之前配置的Filter:IPForbid,我们在本机启动gateway网关和aservice-rbac服务。 当IPForbid是127.0.0.1的时候,我们可以正常访问接口。如果是其他的ip,我们访问失败(403 forbidden)。 说明我们的gateway项目的路由配置放到nacos进行集中管理生效了! ## 二、路由配置动态更新 **不要重启zimug-server-gateway项目**,然后我们去nacos中为gateway新增一个路由配置,如下: ![](https://img.kancloud.cn/aa/64/aa64863eec9d96236e5034c48c2726db_384x284.png) 然后浏览器访问如下网址。 ~~~ http://localhost:8777/category/course ~~~ 然后请求被转发至如下的网址: ~~~ http://www.zimug.com/category/course ~~~ 说明笔者使用的当前版本的Spring Cloud alibaba的nacos、与Spring Cloud Gateway(**二者版本的选择《Spring Boot与Cloud选型兼容》**)契合的非常完美,可以实现配置的动态更新。以后我们想针对所有的网关实例进行配置更新,就再也不需要对gateway网关项目重启了,可以实现实时生效! > 需要注意的是:目前网上的很多文章的内容是基于比较旧的版本实现的,需要自己去实现nacos动态路由加载的监听。比如:[https://article.itxueyuan.com/EX3pLq](https://article.itxueyuan.com/EX3pLq),可以看一下,但是没有必要这么做了。官方的新版本已经可以默认支持网管路由配置的动态更新,不需要重启gateway网关应用!