[zookeeper]3.zookeeper監聽


zookeeper有兩種類型的監聽

  • 監聽節點目錄的變化(增加刪除節點)

    ls -w /path

創建/sanguo/shuguo的永久節點(注意:臨時節點不允許有子節點)

[zk: localhost:2181(CONNECTED) 5] create -s /sanguo/shuguo  joke
Created /sanguo/shuguo0000000005

zkClient客戶端監聽/sanguo目錄的變化

[zk: localhost:2181(CONNECTED) 4] ls -w /sanguo
[shuguo, shuguo0000000002, shuguo0000000003, shuguo0000000004]
[zk: localhost:2181(CONNECTED) 5]
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

  • 監聽節點數據的變化(修改節點的值)

    get -w /path

客戶端修改/sanguo的值

[zk: localhost:2181(CONNECTED) 0] get /sanguo
古代中國
[zk: localhost:2181(CONNECTED) 1] set /sanguo "古中國"

zkClient客戶端監聽/sanguo的值的改變

[zk: localhost:2181(CONNECTED) 20] get -w /sanguo
古代中國
[zk: localhost:2181(CONNECTED) 21]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo

注意:1.客戶端要先註冊監聽。
2.如果目錄或數據發生改變,服務端通知客戶端。客戶端接到監聽事件通知後,就不會繼續監聽。
3.需要重新註冊監聽。



zookeeper監聽機制的實現

1.創建zkClient客戶端。

2.zkClient的main()方法中啓動兩個線程。
connect線程:連接到zkServer,發送監聽請求。(請求監聽節點目錄或者節點數據)。
Listen線程:用於等待處理zkServer的監聽通知。

3.zkClient的connect線程連接到zkServer,併發送監聽事件請求。

4.zkServer接收到zkClient的監聽請求後,建立監聽列表並將監聽事件註冊到列表中。

5.zkServer一旦發現註冊的監聽事件的發生,立即通知到zkClient。

6.zkClient的listen線程調用process()處理監聽通知。

[zookeeper]3.zookeeper監聽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章