一、前言
前篇博客分析了Zookeeper的序列化和通信協(xié)議,接著繼續(xù)學(xué)習(xí)客戶(hù)端,客戶(hù)端是開(kāi)發(fā)人員使用Zookeeper最主要的途徑,很有必要弄懂客戶(hù)端是如何與服務(wù)端通信的。
二、客戶(hù)端
2.1 客戶(hù)端組成
Zookeeper客戶(hù)端主要由如下核心部件構(gòu)成。
1. Zookeeper實(shí)例,客戶(hù)端入口。
2. ClientWatchManager, 客戶(hù)端Watcher管理器。
3. HostProvider,客戶(hù)端地址列表管理器。
4. ClientCnxn,客戶(hù)端核心線程,內(nèi)部包含了SendThread和EventThread兩個(gè)線程,SendThread為I/O線程,主要負(fù)責(zé)Zookeeper客戶(hù)端和服務(wù)器之間的網(wǎng)絡(luò)I/O通信;EventThread為事件線程,主要負(fù)責(zé)對(duì)服務(wù)端事件進(jìn)行處理。
Zookeeper客戶(hù)端初始化與啟動(dòng)環(huán)節(jié),就是Zookeeper對(duì)象的實(shí)例化過(guò)程??蛻?hù)端在初始化和啟動(dòng)過(guò)程中大體可以分為如下3個(gè)步驟
1. 設(shè)置默認(rèn)Watcher
2. 設(shè)置Zookeeper服務(wù)器地址列表
3. 創(chuàng)建ClientCnxn。
若在Zookeeper構(gòu)造方法中傳入Watcher對(duì)象時(shí),那么Zookeeper就會(huì)將該Watcher對(duì)象保存在ZKWatcherManager的