Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 6.4 Spring Cloud Zuul 基于 DB 实现动态路由

6.4 Spring Cloud Zuul 基于 DB 实现动态路由

前面我们介绍了Zuul的各种路由映射规则的配置方式,这些方式增加了我们在构建应用时的选择余地,这些方式被称为“静态路由”。通常来讲,我们在构建应用的时候就已经把各种路由的映射规则制定好了,但是在实际生产活动中,仍然无法避免上线新的服务,这时就需要新增路由映射规则,但是由于是在生产环境,我们不能轻易停机进行服务上线的活动,那么问题来了,Zuul是在启动时,直接读取配置文件的映射规则写入内容中的,要新增或者修改映射路由,就必须停机在重启。能不能有一种方案,既可以动态的修改路由映射规则,又不需要重启服务的呢?答案当然是肯定的,接下来,我们就介绍一下基于DB(从数据库读取路由映射规则)的动态路由方案。

6.4.1 动态路由核心原理

通过DB实现动态路由,主要是通过重写Zuul的配置读取方式,从配置文件修改为读取数据库,采用事件刷新机制,当数据库数据有变化时,调用Zuul的时间刷新机制,实时的更新Zuul当前路由映射规则。

我们有必要先介绍一下Zuul路由加载和动态刷新的原理,因为要实现动态路由,需要重写这部分的代码,首先我们先看一下Zuul核心类的依赖关系图,如图6-16:

图6-16

  1. DiscoveryClientRouteLocator.java

从名字来看,这个类的作用是路由配置信息的读取和新节点注册变更的操作类,部分核心源码如下:

猜你喜欢

转载自blog.csdn.net/meteor_93/article/details/104137543