一、前言
前面分析了zookeeperserver原始碼,由於quorumzookeeperserver的原始碼相對簡單,於是直接分析leaderzookeeperserver。
二、leaderzookeeperserver原始碼分析
2.1 類的繼承關係
publicclass leaderzookeeperserver extends quorumzookeeperserver {}
說明:leaderzookeeperserver繼承quorumzookeeperserver抽象類,其會繼承zookeeperserver中的很多方法。
2.2 類的屬性
publicclass leaderzookeeperserver extends
quorumzookeeperserver
2.3 類的建構函式
leaderzookeeperserver(filetxnsnaplog logfactory, quorumpeer self,datatreebuilder treebuilder, zkdatabase zkdb)
throws
ioexception
說明:其直接呼叫父類quorumzookeeperserver的建構函式,然後再呼叫zookeeperserver的建構函式,逐級構造。
2.4 核心函式分析
1. setuprequestprocessors函式
protectedvoid
setuprequestprocessors()
2. registerjmx函式
protectedvoid
registerjmx()
catch
(exception e)
}
說明:該函式用於註冊jmx服務,首先使用datatree初始化datatreebean,然後使用datatreebean和serverbean呼叫register函式進行註冊,其原始碼如下
publicvoid
register(zkmbeaninfo bean, zkmbeaninfo parent)
throws
jmexception
//補充為完整的路徑
path =makefullpath(path, parent);
if(bean.ishidden())
return
;
//使用路徑來建立名字
objectname oname =makeobjectname(path, bean);
try
catch
(jmexception e)
} catch
(exception e)
jmxdatatreebean = null
; }
說明:該函式用於取消註冊jmx服務,其會呼叫unregister函式,其原始碼如下
publicvoid
unregister(zkmbeaninfo bean)
catch
(jmexception e)
//從mapbean2path和mapname2bean中移除bean
mapbean2path.remove(bean);
mapname2bean.remove(bean.getname());
}
說明:unregister與register的過程恰好相反,是移除bean的過程。
三、總結
本篇學習了leaderzookeeperserver的原始碼,其原始碼非常簡單,主要涉及到註冊和取消註冊服務,其大部分邏輯可以直接使用zookeeperserver中的方法,也謝謝各位園友的**~
ZooKeeper原始碼分析
業餘時間學習了一下zookeeper distributed process coordination這本書的內容,對zookeeper實現的細節很好奇,所以順便把zookeeper原始碼看了一遍。看完之後想寫點內容做個筆記,確發現不好開始。由於zookeeper乙個完整的邏輯的 可能在多個執行緒,...
zookeeper的原始碼分析
閱讀本文可以帶著下面問題 1.zookeeper客戶端有幾部分組成?2.那個模組管理所有網路 io的模組?3.watcher是否允許多個 client 對乙個或多個 znode 進行監控?4.zookeeper例項被建立時,會隨之建立幾個執行緒,各自是什麼?5.真正處理網路 io的是那個執行緒?模組...
Zookeeper 原始碼分析 啟動
本文主要介紹了zookeeper啟動的過程 執行zkserver.sh start命令可以啟動zookeeper。入口的main函式在類中quorumpeermain。main函式主要呼叫了runfromconfig函式,建立了 quorumpeer物件,並且呼叫了start函式,從而啟動了zook...