soul 網(wǎng)關(guān)(十):數(shù)據(jù)同步方式之 zookeeper(二)

本文是數(shù)據(jù)同步 zookeeper 系列的第二篇文章,主要講從代碼出發(fā),講解數(shù)據(jù)怎么從啟動(dòng),到更新操作等,是怎么同步到網(wǎng)關(guān)端的流程。
前文概要性的介紹了 zookeeper 的概念和它的主要特性,介紹了 Soul 網(wǎng)關(guān)是怎么配置 Zookeeper 的。

admin 端

admin 啟動(dòng)時(shí)

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

從日志中得出,啟動(dòng)后會(huì)有心跳檢測(cè)。接下來注意看 zooInspector 連接 Zookeeper 的變化,

啟動(dòng)前后的變化

由此可以看出,Zookeeper 的方式是有初始化數(shù)據(jù)的功能的。對(duì)比之前的 nacos 是沒有,現(xiàn)在的 nacos 已經(jīng)有了,詳見 issue1052。

查看源碼得出,在啟動(dòng)時(shí) admin 會(huì)注入 ZkClientZookeeperDataInit,DataChangedListener 的 Bean。這里的 ZookeeperDataInit 就是初始化 Zookeeper 中數(shù)據(jù)的。 ZookeeperDataChangedListener 實(shí)現(xiàn)了 DataChangedListener 。 大致流程圖如下:

Zookeeper admin 鏈路圖

admin 更新數(shù)據(jù)時(shí)

打開 admin 的管理后臺(tái),配置信息時(shí),會(huì)發(fā)布一個(gè) DataChangedEvent,DataChangedListener 就會(huì)監(jiān)聽到此時(shí)的變化,從而做出相應(yīng)的變化。大致的流程圖如下圖所示:

admin 數(shù)據(jù)變更時(shí)

之前一直沒有注意到點(diǎn)的是:PluginTransfer 是一個(gè)接口, 而這個(gè)接口的實(shí)現(xiàn)類都是怎么來的。 這里用了一個(gè)插件 mapstruct

admin 的基本分析完了, 它的主要職責(zé)是將數(shù)據(jù)同步到 Zookeeper 上。不管剛啟動(dòng)還是啟動(dòng)后它就會(huì)觸發(fā) DataChangedEvent 事件,然后經(jīng)過一系列的操作, 最后由 ZkClient 將數(shù)據(jù)同步到 Zookeeper。 總體來說,流程比較簡(jiǎn)單。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容