二維碼
微世推網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 企業(yè)商訊 » 供求資訊 » 正文

Curator客戶端子節(jié)點(diǎn)監(jiān)聽機(jī)制源碼分析你了解多少?

放大字體  縮小字體 發(fā)布日期:2022-04-18 01:14:35    瀏覽次數(shù):170
導(dǎo)讀

上一篇:Curator客戶端創(chuàng)建zk節(jié)點(diǎn)源碼分析一、demopublic static void main(String[] args) throws Exception {RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181",5000,3000,retryPolic

上一篇:Curator客戶端創(chuàng)建zk節(jié)點(diǎn)源碼分析

一、demo

public static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3); Curatorframework client = CuratorframeworkFactory.newClient( "localhost:2181", 5000, 3000, retryPolicy); client.start(); PathChildrenCache pathChildrenCache = new PathChildrenCache( client, "/cluster", true); pathChildrenCache.start(); // cache就是把zk里得數(shù)據(jù)緩存到了你得客戶端里來 // 你可以針對(duì)這個(gè)緩存得數(shù)據(jù)加監(jiān)聽器,去觀察zk里得數(shù)據(jù)得變化 pathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() { public void childEvent(Curatorframework curatorframework, PathChildrenCacheEvent pathChildrenCacheEvent) throws Exception { } }); }

我們來看一下這行代碼,是如何創(chuàng)建得

PathChildrenCache pathChildrenCache = new PathChildrenCache( client, "/cluster", true);

注釋:?jiǎn)?dòng)緩存。緩存不會(huì)自動(dòng)啟動(dòng)。您必須調(diào)用此方法。

說明調(diào)用start方法時(shí)默認(rèn)不會(huì)緩存數(shù)據(jù)

默認(rèn)走NORMAL分支,我們點(diǎn)進(jìn)去看看

這里就啟動(dòng)了一個(gè)線程,將傳遞進(jìn)來得Operation放入operationsQuantizer,如果放成功則啟動(dòng)一個(gè)線程,將Operation從operationsQuantizer刪除,調(diào)用invoke方法,我們?cè)诜颠^去看一下這個(gè)Operation

這個(gè)里面invoke方法會(huì)去調(diào)用PathChildrenCache得refresh方法,我們?cè)诟兄x閱讀進(jìn)去看一下

方法注釋:

這個(gè)方法得是確保監(jiān)聽得目錄在zk中已經(jīng)存在了

這里會(huì)根據(jù)構(gòu)造器得模式先獲取出一個(gè)GetChildrenBuilder,在調(diào)用GetChildrenBuilder得usingWatcher方法將watcher監(jiān)聽器保存進(jìn)去,在通過inBackground方法將剛剛創(chuàng)建得BackgroundCallback回調(diào)保存

實(shí)際邏輯則在forPath方法里面,這個(gè)因?yàn)槭呛笈_(tái)請(qǐng)求,我們直接看processBackgroundOperation方法,這里得話會(huì)創(chuàng)建一個(gè)OperationAndData類,將自己作為operation傳遞進(jìn)去

這里得話實(shí)際就是調(diào)用OperationAndData類得callPerformBackgroundOperation方法,而這個(gè)方法其實(shí)就是調(diào)用剛剛傳遞進(jìn)來得GetChildrenBuilderImpl得performBackgroundOperation方法

簡(jiǎn)要說明就是forPath方法會(huì)調(diào)用performBackgroundOperation方法,這個(gè)方法會(huì)調(diào)用zk原生得api給他一個(gè)Watcher監(jiān)聽器,zk如果有子節(jié)點(diǎn)發(fā)生事件會(huì)通知原生得Watcher反過來調(diào)用我們注冊(cè)得listener;

 
(文/小編)
打賞
免責(zé)聲明
本文為小編原創(chuàng)作品?作者: 小編。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://nyqrr.cn/qysx/show-120445.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
 

Copyright?2015-2023 粵公網(wǎng)安備 44030702000869號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

24在線QQ: 770665880

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

韓瑞 小英 張澤

工作時(shí)間:

周一至周五: 08:00 - 24:00

反饋

用戶
反饋