spring cloudSpring Cloud

实现Spring Cloud Gateway路由动态加载及持久化

2020-11-15  本文已影响0人  大哥你先走

Spring Cloud Gateway提供了添加、删除和查询路由的API,通过API添加的路由默认存储在内存之中。应用重启时,通过API添加的路由会丢失,进而导致应用的功能受损。如果应用有多个实例,Spring Cloud Gateway也没有提供路由同步机制,多个实例之间的路由信息不一致,影响正常的业务。由于Spring Cloud Gateway默认实现在可靠性和一致性方面存在不足,进而无法直接部署在生产环境,为此需要自定义实现路由的存储和同步机制。

Spring Cloud Gateway的路由加载机制

在Spring Cloud Gateway中一个RouteDefinition对象定义一个路由。Spring Cloud Gateway启动时首先加载所有的RouteDefinition,然后生成路由并讲路由加载到内中(有缓存机制,主要目的是提供路由匹配的效率)。Spring Cloud Gateway可以从四个数据源加载RouteDefinition:配置文件,Fluent Route API,RouteDefinitionRepository和DiscoveryClient(Spring Cloud定义的服务发现接口)。从路由的加载机制可以看出,能够实现动态添加、删除、修改路由的方式就是自定义实现RouteDefinitionRepository,从而可以保证在Spring Cloud Gateway启动时加载之前已经添加过的路由。

应用通过代码,配置文件以及基于服务发现添加的路由无法被修改

Spring Cloud Gateway的路由刷新通知机制。

Spring Cloud Gateway定义了一个RouteRefreshListener用来监听路由变化事件RefreshRoutesEvent,因此在添加、删除、更新路由后只需要发布一个RefreshRoutesEvent事件以让所有存储路由的组件更新路由即可。

动态路由实现

实现机制

实现步骤:

实现源码

基于mysql的实现源码参考Spring Cloud Gateway Example

上一篇 下一篇

猜你喜欢

热点阅读