soul 网关(十):数据同步方式之 zookeeper(二)

本文是数据同步 zookeeper 系列的第二篇文章,主要讲从代码出发,讲解数据怎么从启动,到更新操作等,是怎么同步到网关端的流程。
前文概要性的介绍了 zookeeper 的概念和它的主要特性,介绍了 Soul 网关是怎么配置 Zookeeper 的。

admin 端

admin 启动时

2021-01-25 23:00:40.661  INFO 32864 --- [-localhost:2181] org.I0Itec.zkclient.ZkEventThread        : Starting ZkClient event thread.
...
2021-01-25 23:00:40.692  INFO 32864 --- [           main] org.apache.zookeeper.ZooKeeper           : Initiating client connection, connectString=localhost:2181 sessionTimeout=5000 watcher=org.I0Itec.zkclient.ZkClient@4eb9ae4d
...
2021-01-25 23:02:06.010 ERROR 32864 --- [upstream-task-1] o.d.s.a.s.impl.UpstreamCheckService      : check the url=192.168.0.1:22 is fail

从日志中得出,启动后会有心跳检测。接下来注意看 zooInspector 连接 Zookeeper 的变化,

启动前后的变化

由此可以看出,Zookeeper 的方式是有初始化数据的功能的。对比之前的 nacos 是没有,现在的 nacos 已经有了,详见 issue1052。

查看源码得出,在启动时 admin 会注入 ZkClientZookeeperDataInitDataChangedListener 的 Bean。这里的 ZookeeperDataInit 就是初始化 Zookeeper 中数据的。 ZookeeperDataChangedListener 实现了 DataChangedListener 。 大致流程图如下:

Zookeeper admin 链路图

admin 更新数据时

打开 admin 的管理后台,配置信息时,会发布一个 DataChangedEvent,DataChangedListener 就会监听到此时的变化,从而做出相应的变化。大致的流程图如下图所示:

admin 数据变更时

之前一直没有注意到点的是:PluginTransfer 是一个接口, 而这个接口的实现类都是怎么来的。 这里用了一个插件 mapstruct

admin 的基本分析完了, 它的主要职责是将数据同步到 Zookeeper 上。不管刚启动还是启动后它就会触发 DataChangedEvent 事件,然后经过一系列的操作, 最后由 ZkClient 将数据同步到 Zookeeper。 总体来说,流程比较简单。

你可能感兴趣的:(soul 网关(十):数据同步方式之 zookeeper(二))