[Soul 源碼之旅] 1.5 Soul數(shù)據(jù)同步 (Zookeeper)

1.5.1 Soul Admin Zookeeper 發(fā)布更新

我們還是從上次的入口進(jìn)來 DataChangedEventDispatcher 的 onApplicationEvent 方法机久,我們開啟Zookeeper發(fā)送數(shù)據(jù)后意系,在 DataSyncConfiguration 中定義假如存在soul.sync.zookeeper 參數(shù)則會注入 zookeeperDataChangedListener 監(jiān)聽器床牧。


image.png

這里使用到@Import注解媳搪,該注解主要作用是用來導(dǎo)入@Configuration注解的配置類,這里我們只有但含有 Zookeeper 的配置項才可以注入ZookeeperListener 同理也只有在這個時候才會注入 ZookeeperConfiguration 類在讶。我們看 ZookeeperProperties 類 @ConfigurationProperties 注解是假如沒有@Component 注解配合蟀伸,Spring 是不會自動作為Bean注入的泌类,需要使用@EnableConfigurationProperties 把使用 @ConfigurationProperties 的類進(jìn)行了一次注入。


image.png

這里會根據(jù) Zookeeper 的 Url new 了一個ZKClinet 作為后面數(shù)據(jù)寫入的客戶端藤滥。zookeeperDataChangedListener 再根據(jù)注入的這個ZkClient 鳖粟,這里還有一個類就是 ZookeeperDataInit 它主要是實現(xiàn)了CommandLineRunner 這是 Spring 中程序啟動之前執(zhí)行任何任務(wù),這里是判斷zk 是否存在需要監(jiān)聽的路徑超陆,假如沒有則調(diào)用 SyncDataService 的syncAll 方法牺弹,這里和我們看到的WebSocket是一致的,最終將 Plugin 时呀,Selector 和 Rule 三種數(shù)據(jù)通知個對應(yīng)的 Listener 张漂, 這里就是調(diào)用到剛剛初始化完成的 zookeeperDataChangedListener 。
image.png

我們以Selector 為例谨娜,這里最終調(diào)用 createSelector 進(jìn)行創(chuàng)建航攒。


create

先創(chuàng)建對應(yīng)的path,然后再根據(jù)Selector 的id 生產(chǎn)下一級路徑趴梢,最后將Selector 的 data 寫入該節(jié)點漠畜。
selector

我們使用zookeeperInspect 查看币他,這里的數(shù)據(jù)已經(jīng)寫入Zookeeper ,最終這里寫入了我們數(shù)據(jù)庫所有的數(shù)據(jù)憔狞。這里是直接使用 java 內(nèi)置的序列化方式蝴悉。
image.png

1.5.2 Soul BootStrap Zookeeper 同步數(shù)據(jù)

Soul BootStrap 使用Zookeeper 同步數(shù)據(jù)的主要配置類是 ZookeeperSyncDataConfiguration ,通過ZookeeperConfig 自動化生產(chǎn) Zkclient瘾敢。


image.png

ZookeeperSyncDataConfiguration 初始化主要做了三件事拍冠,就是綁定 data meta 和 auth 數(shù)據(jù)的監(jiān)聽事件。我們從 selector 作為出發(fā)點簇抵,所以觸發(fā)的方法是 watcherData庆杜。


image.png

首先Soul 獲取了/soul/plugin 路徑下的所有插件信息。然后遍歷每個插件碟摆,調(diào)用 watcherAll 方法晃财,監(jiān)聽該插件的 Plugin Selector 和 Rule 信息。
image.png

我們看一下Hystrix 插件的 watchSelector 方法典蜕,它先看該節(jié)點下是否存在插件的selector 數(shù)據(jù)断盛,假如有則將所有數(shù)據(jù)拿回來進(jìn)行遍歷。


image.png

然后更新本地內(nèi)存嘉裤,這里主要是通知各個 plugin 插件更新內(nèi)存數(shù)據(jù)郑临。這里通過 pluginDataSubscriber 拿到各個插件數(shù)據(jù)處理的 Handler 進(jìn)行數(shù)據(jù)處理。接著Soul為每一個子節(jié)點添加添加訂閱者屑宠,訂閱節(jié)點的數(shù)據(jù)變化厢洞。
image.png

我們觀察每個ZkDataListener 主要監(jiān)聽Datachange 事件和DataDelete事件。
image.png

這里還是還是調(diào)用 cacheSelectorData 方法 典奉,主要還是調(diào)用 CommonPluginDataSubscriber 的 onSelectorSubscribe 方法躺翻,這里的 DataCache 就是緩存了所有數(shù)據(jù)的工廠,我們只需要更新這個工廠的數(shù)據(jù)卫玖。接著調(diào)用該插件的 handlerSelector 方法公你,這是個Defaut 方法留給各個插件實現(xiàn),各個插件也可以選擇不實現(xiàn)假瞬。


image.png

image.png

這樣我們整個Zookeeper的更新流程就走完了陕靠,是不是很簡單。

1.5.3 總結(jié)

今天我們又掌握了Spring 的一些常用技巧如 @Import + @ConfigurationProperties + @EnableConfigurationProperties 這個三個注解組成的元數(shù)據(jù)加載方法脱茉,還有CommonLineRunner 通用的啟動后處理機(jī)制剪芥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琴许,隨后出現(xiàn)的幾起案子税肪,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件益兄,死亡現(xiàn)場離奇詭異锻梳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)净捅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門疑枯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灸叼,你說我怎么就攤上這事神汹。” “怎么了古今?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滔以。 經(jīng)常有香客問我捉腥,道長,這世上最難降的妖魔是什么你画? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任抵碟,我火速辦了婚禮,結(jié)果婚禮上坏匪,老公的妹妹穿的比我還像新娘拟逮。我一直安慰自己,他們只是感情好适滓,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布敦迄。 她就那樣靜靜地躺著,像睡著了一般凭迹。 火紅的嫁衣襯著肌膚如雪罚屋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天嗅绸,我揣著相機(jī)與錄音脾猛,去河邊找鬼。 笑死鱼鸠,一個胖子當(dāng)著我的面吹牛猛拴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚀狰,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼愉昆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了造锅?” 一聲冷哼從身側(cè)響起撼唾,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倒谷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛛蒙,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年渤愁,在試婚紗的時候發(fā)現(xiàn)自己被綠了牵祟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡抖格,死狀恐怖诺苹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雹拄,我是刑警寧澤收奔,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站滓玖,受9級特大地震影響坪哄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜势篡,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一翩肌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禁悠,春花似錦念祭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祝钢,卻和暖如春比规,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拦英。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工蜒什, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疤估。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓灾常,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铃拇。 傳聞我的和親對象是個殘疾皇子钞瀑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容