1. 程式人生 > >ZooKeeper Watcher

ZooKeeper Watcher

客戶端 包含 事件 eve 客戶端設置 類型 ffffff 才會 訂閱者

ZooKeeper 提供了分布式數據發布/訂閱功能,一個典型的發布/訂閱模型系
統定義了一種一對多的訂閱關系,能讓多個訂閱者同時監聽某一個主題對象,當這個主題對象自身狀態變化時,會通知所有訂閱者,使他們能夠做出相應的處理。
ZooKeeper 中, 引入了 Watcher 機制來實現這種分布式的通知功能。
ZooKeeper 允許客戶端向服務端註冊一個 Watcher 監聽,當服務端的一些事件觸發了這個 Watcher,那麽就會向指定客戶端發送一個事件通知來實現分布式的通知功能。
觸發事件種類很多,如:節點創建,節點刪除,節點改變,子節點改變等。總的來說可以概括 Watcher 為以下三個過程:客戶端向服務端註冊 Watcher、
服務端事件發生觸發 Watcher、客戶端回調 Watcher 得到觸發事件情況
4.1 . Watch 機制特點
一次性觸發
事件發生觸發監聽,一個 watcher event 就會被發送到設置監聽的客戶端, 這種效果是一次性的,後續再次發生同樣的事件,不會再次觸發。
事件封裝
ZooKeeper 使用 WatchedEvent 對象來封裝服務端事件並傳遞。
WatchedEvent 包含了每一個事件的三個基本屬性:
通知狀態(keeperState),事件類型(EventType)和節點路徑(path) event 異步發送
watcher 的通知事件從服務端發送到客戶端是異步的。先註冊再觸發
Zookeeper 中的 watch 機制,必須客戶端先去服務端註冊監聽,這樣事件發送才會觸發監聽,通知給客戶端。

4.2 . 通知狀態和事件類型
同一個事件類型在不同的通知狀態中代表的含義有所不同,下表列舉了常見的通知狀態和事件類型。

技術分享圖片
其中連接狀態事件(type=None, path=null)不需要客戶端註冊,客戶端只要有需要直接處理就行了。

4.3 . Shell 客戶端設置 watcher
設置節點數據變動監聽:
技術分享圖片
通過另一個客戶端更改節點數據:
技術分享圖片
此時設置監聽的節點收到通知:
技術分享圖片

ZooKeeper Watcher