Zookeeper 原始碼分析之伺服器(三)

2021-07-28 05:54:15 字數 2022 閱讀 5995

一、前言

前面分析了zookeeperserver原始碼,由於quorumzookeeperserver的原始碼相對簡單,於是直接分析leaderzookeeperserver。

二、leaderzookeeperserver原始碼分析

2.1 類的繼承關係 

public

class leaderzookeeperserver extends quorumzookeeperserver {}

說明:leaderzookeeperserver繼承quorumzookeeperserver抽象類,其會繼承zookeeperserver中的很多方法。

2.2 類的屬性 

public

class leaderzookeeperserver extends

quorumzookeeperserver

2.3 類的建構函式

leaderzookeeperserver(filetxnsnaplog logfactory, quorumpeer self,

datatreebuilder treebuilder, zkdatabase zkdb)

throws

ioexception

說明:其直接呼叫父類quorumzookeeperserver的建構函式,然後再呼叫zookeeperserver的建構函式,逐級構造。

2.4 核心函式分析

1. setuprequestprocessors函式 

protected

void

setuprequestprocessors()

2. registerjmx函式 

protected

void

registerjmx()

catch

(exception e)

}

說明:該函式用於註冊jmx服務,首先使用datatree初始化datatreebean,然後使用datatreebean和serverbean呼叫register函式進行註冊,其原始碼如下 

public

void

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函式,其原始碼如下 

public

void

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...