前言
当我们的网关Gateway程序开发完成之后,需要部署到生产环境,这个时候你的程序不能是单点运行的,肯定是多节点启动(独立部署或者docker等容器部署),防止单节点故障导致整个服务不能访问,网关是对客户端的入口与出口,在生产运行中极为重要,哪怕是简单的重启也会导致部分请求的丢失。
网关的路由配置这个时候就是一个大问题,是代码里面编写还是配置文件配置?他们都有一个致命的缺点,当有新的程序需要接入到网关进行路由或者有服务需要下线时候需要修改代码或者配置,然后重启整个网关程序,导致其他正常的服务路由受到了影响。
所以在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启网关,所以实现动态路由是非常有必要的;
本文主要介绍Spring Cloud Gateway 实现的思路,并且把路由信息存放在外部源中,这粒以Nacos为数据源来讲解。
实现要点
要实现动态路由只需关注下面4个点
1、网关启动时,动态路由的数据怎样加载进来
2、静态路由与动态路由以那个为准
3、监听动态路由的数据源变化
4、数据有变化时怎样通知gateway刷新路由
ps:静态路由指的是配置文件里写死的路由配置
具体实现
Spring Cloud Gateway 中加载路由信息分别由以下几个类负责
1、PropertiesRouteDefinitionLocator:从配置文件中读取路由信息(如YML、Properties等)
2、RouteDefinitionRepository