soul源码阅读(十五)zookeeper admin同步

目录

zookeeper admin配置及运行

zookeeper admin源码流程跟踪及解析


zookeeper admin配置及运行

1、启动zookeeper server,以windows为例,在自己zookeeper安装目录下双击zkServer.cmd启动一个server,启动结果如下图所示:

2、soul-admin配置zookeeper client连接,pom.xml引入文件如下:

application.yml配置参数如下:

3、准备就绪,启动SoulAdminBootstrap,启动成功,而且通过日志可以看出已正常连接zookeeper

4、查看zookeeper节点数据,两种方式都可以查看。

方式一:cd 到zookeeper的bin目录下,如D:\Program Files\apache-zookeeper-3.5.8-bin\bin,输入start zkCli.cmd -server localhost:2181启动一个客户端连接截图如下:

ls /看下,以下都是我们的节点信息。

方式二:cd D:\Program Files\apache-zookeeper-3.5.8-bin\build,然后java -jar zookeeper-dev-ZooInspector.jar启动一个页面操作工具,启动连接localhost:2181的页面如下:

zookeeper admin源码流程跟踪及解析

源码流程图类似我们上篇分析websocket socket的流程基本类似。这里我们就直接开始分析。

入口还是同一个位置DataSyncConfiguration会根据我们的配置选择选择一个同步策略,这里因为我们配置了zookeeper,所以将会初始化ZookeeperDataChangedListener和ZookeeperDataInit到spring容器。

@Configuration
    @ConditionalOnProperty(prefix = "soul.sync.zookeeper", name = "url")
    @Import(ZookeeperConfiguration.class)
    static class ZookeeperListener {
        /**
         * Config event listener data changed listener.
         *
         * @param zkClient the zk client
         * @return the data changed listener
         */
        @Bean
        @ConditionalOnMissingBean(ZookeeperDataChangedListener.class)
        public DataChangedListener zookeeperDataChangedListener(final ZkClient zkClient) {
            return new ZookeeperDataChangedListener(zkClient);
        }
        /**
         * Zookeeper data init zookeeper data init.
         *
         * @param zkClient        the zk client
         * @param syncDataService the sync data service
         * @return the zookeeper data init
         */
        @Bean
        @ConditionalOnMissingBean(ZookeeperDataInit.class)
        public ZookeeperDataInit zookeeperDataInit(final ZkClient zkClient, final SyncDataService syncDataService) {
            return new ZookeeperDataInit(zkClient, syncDataService);
        }
    }

我们看到参数为zkclient,那么我们再找下这个参数是如何会注入spring容器的,找到加了@Bean注解,那么在启动的时候会读取配置的url和sessionTimeout等参数创建一个zkClient的连接。

继续回到最开始的初始化ZookeeperDataChangedListener和ZookeeperDataInit的位置,先来看下ZookeeperDataChangedListener类,我们看到实现了DataChangeListener,做了具体插件,元数据等的更新zookeeper节点的操作。

ZookeeperDataInit则实现了CommandLineRunner接口,该接口在springboot的作用为启动后会遍历所有实现CommandLineRunner的实体类并执行run方法,如果需要排序,那么可以加上@Order注解(或者实现Order接口)来表明顺序。简单来说就是一个初始化的操作,我们看到run方法里会去判断如果插件等列表不为空,则会进行一次同步zookeeper操作。

同步All的方法如下,查询所有数据,然后发布一个事件。

根据上篇我们分析websocket的源码逻辑,我们知道发布事件后,会有一个监听器来处理事件,就是下面的DataChangedEventDispatcher的对象,该对象的onApplicationEvent开始处理,然后遍历所有监听器的event事件,进行处理,类似一个事件分发器的一个角色,而真正的事件处理者就是我们上面的ZookeeperDataChangedListener对象,然后执行对应xxxxchanged写入到zookeeper。

同样的,大家可以观察下启动,打个debug走一遍流程,然后再在admin页面上打开一个插件或者选择器的配置,然后观察走一遍流程,这里就不做演示了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值