一、前言

前篇博客分析了Zookeeper的序列化和通信協(xié)議,接著繼續(xù)學(xué)習(xí)客戶端,客戶端是開發(fā)人員使用Zookeeper最主要的途徑,很有必要弄懂客戶端是如何與服務(wù)端通信的。

二、客戶端

2.1 客戶端組成

Zookeeper客戶端主要由如下核心部件構(gòu)成。

1. Zookeeper實(shí)例,客戶端入口。

2. ClientWatchManager, 客戶端Watcher管理器。

3. HostProvider,客戶端地址列表管理器。

4. ClientCnxn,客戶端核心線程,內(nèi)部包含了SendThread和EventThread兩個(gè)線程,SendThread為I/O線程,主要負(fù)責(zé)Zookeeper客戶端和服務(wù)器之間的網(wǎng)絡(luò)I/O通信;EventThread為事件線程,主要負(fù)責(zé)對(duì)服務(wù)端事件進(jìn)行處理。

Zookeeper客戶端初始化與啟動(dòng)環(huán)節(jié),就是Zookeeper對(duì)象的實(shí)例化過程??蛻舳嗽诔跏蓟蛦?dòng)過程中大體可以分為如下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的