Bootstrap

SpringCloud Gateway学习(二)--动态路由

SpringCloud Gateway学习(二)--动态路由

        之前在这篇文章使用Nacos结合SpringCloud Gateway 完成 Spring Cloud 服务路由中使用过gateway 来作为网关写了个小例子测试下,后来想了下,在生产环境不能够这样用,需要配置的太多了,而且也不现实。

         只能另想办法,最好是写在数据库里或是别的地方。这样可以灵活地添加、删除、修改,更新,刷新。然后就可以使用, 不用重启服务。

分析下gateway配置路由主要有两种方式,一种是用yml配置文件,一种是写代码里,这两种方式都是不支持动态配置的,

首先看下代码写个配置里边用到了RouteLocatorBuilder 在这个包下

然后找到了相关的这几个包分别看了下

保存删除route 在进去看下里边如何写的

它是保存了RouteDefinition

里边大概有一些属性还有filter和PredicateDefinition 这些跟配置文件或是代码里的比较相似

只要我们建立这个类存进数据库 就可以保存配置了。

下面就来看看gateway是如何加载这些配置信息的。

通过这几个实现类,再结合上面的config包下AutoConfiguration里面的Primary信息,就知道加载配置信息的顺序。

PropertiesRouteDefinitionLocator-->|配置文件加载初始化| CompositeRouteDefinitionLocator
RouteDefinitionRepository-->|存储器中加载初始化| CompositeRouteDefinitionLocator
DiscoveryClientRouteDefinitionLocator-->|注册中心加载初始化| CompositeRouteDefinitionLocator

从代码可以看到如果没有RouteDefinitionRepository的实例,则默认用InMemoryRouteDefinitionRepository。而做动态路由的关键就在这里。即通过自定义的RouteDefinitionRepository类,来提供路由配置信息。

另外 还提供了GatewayRedisAutoConfiguration。 我们也可以通过redis 结合mysql进行实现,通过定时拉取配置信息,或是通过nacos获取信息。

下篇文章写下动态路由例子

;