ZooKeeper如何設定監視點

2021-09-28 11:21:33 字數 1067 閱讀 1471

zookeeper的api中的所有讀操作:getdata、getchildren和exists,均可以選擇在讀取的znode節點上設定監視點。使用監視點機制,需要實現watcher介面類,實現其中的方法如下:

public void process(watchedevent event);
watchedevent資料結構包括以下資訊:

其中前三個事件型別只涉及單個znode節點,第四個事件型別涉及監視的znode節點的子節點。使用none不是表示無事件發生,而是zookeeper的會話狀態發生了變化。

監視點有兩種型別:資料監視點和子節點監視點。建立、刪除或設定乙個znode節點的資料都會觸發資料監視點,exists和getdata這兩個操作可以設定資料監視點。只有getchildren操作可以設定子節點監視點,這種監視點只有在znode子節點建立或刪除時才被觸發。對於每種事件型別,可以通過以下呼叫設定監視點:

當建立乙個zookeeper物件,需要傳遞乙個預設的watcher物件,zookeeper客戶端使用這個監視點來通知應用zookeeper狀態的變化情況,如會話狀態的變化。對於zookeeper節點的事件的通知,可以使用預設的監視點,也可以單獨實現乙個。例如,getdata呼叫有兩種方式設定監視點:

public byte getdata(final string path, watcher watcher, stat stat);

public byte getdata(string path, boolean watch, stat stat);

兩個方法第乙個引數均為znode節點,第乙個方法傳遞乙個新的watcher物件,第二個方法則告訴客戶端使用預設的監視點,只需要在呼叫時將第二個引數傳遞true。

stat入參為stat型別的例項化物件,zookeeper使用該物件返回指定的path引數的znode節點資訊。stat結構包括znode節點的屬性資訊,如該znode節點的上次更新(zxid)的時間戳,以及該znode節點的子節點數。

對於監視點的乙個重要問題是,一旦設定監視點就無法移除。要想移除乙個監視點,只有兩個方法,一是觸發這個監視點,二是使其會話被關閉或過期

5 監視和ZooKeeper操作

zookeeper中的寫入 write 操作是原子性和永續性的。寫入到大多數zookeeper伺服器上的永續性儲存中,可以保證寫操作成功。無論如何,zookeeper的最終一致性模型允許讀取 read zookeeper服務的最新狀態,並且同步 sync 操作允許客戶端更新zookeeper服務的最...

Zookeeper如何正確設定和獲取watcher

watcher 設定是開發中最常見的,需要搞清楚watcher的一些基本特徵,對於exists getdata getchild對於節點的不同操作會收到不同的 watcher資訊 state 112 會話超時狀態 state 113 認證失敗狀態 state 1 連線建立中 state 2 暫時不清...

zookeeper集群搭建設定

zookeeper 官網 現在最新版本是 3.4.6 但是這個版本我沒有執行起來,可能是那配置出現問題了,現在我用的是3.4.5 環境 windows 8.1 zookeeper3.4.5 現在要做的是 單機偽集群 木有辦法 沒有那麼多機器啊 修改配置檔案,在conf中 將zoo sample.cf...