ZooKeeper寫事件與出發watcher的對應關係

下面表格列出了寫操做與ZK內部產生的事件的對應關係: git

event For "/path" event For "/path/child"
create("/path") EventType.NodeCreated NA
delete("/path") EventType.NodeDeleted NA
setData("/path") EventType.NodeDataChanged NA
create("/path/child") EventType.NodeChildrenChanged EventType.NodeCreated
delete("/path/child") EventType.NodeChildrenChanged EventType.NodeDeleted
setData("/path/child") NA EventType.NodeDataChanged

而ZK內部的寫事件與所觸發的watcher的對應關係以下: github

event For "/path" defaultWatcher exists
("/path")
getData
("/path")
getChildren
("/path")
EventType.None
EventType.NodeCreated
EventType.NodeDeleted √(不正常)
EventType.NodeDataChanged
EventType.NodeChildrenChanged

綜合上面兩個表,咱們能夠總結出各類寫操做能夠觸發哪些watcher,以下表所示: session

"/path" "/path/child"
exists getData getChildren exists getData getChildren
create("/path")
delete("/path")
setData("/path")
create("/path/child")
delete("/path/child")
setData("/path/child")

若是發生session close、authFail和invalid,那麼全部類型的wather都會被觸發 spa

zkClient除了作了一些便捷包裝以外,對watcher使用作了一點加強。好比subscribeChildChanges其實是經過exists和getChildren關注了兩個事件。這樣當create("/path")時,對應path上經過getChildren註冊的listener也會被調用。另外subscribeDataChanges實際上只是經過exists註冊了事件。由於從上表能夠看到,對於一個更新,經過exists和getData註冊的watcher要麼都會觸發,要麼都不會觸發。 事件

zkClient地址:https://github.com/sgroschupf/zkclient ci

相關文章
相關標籤/搜索