首頁 > 軟體

zookeeper的watch機制原理解析

2022-06-26 10:01:18

一、Watch機制介紹

我們可以把 Watch 理解成是註冊在特定 Znode 上的觸發器。當這個 Znode 發⽣改變,也就是調⽤了 create , delete , setData ⽅法的時候,將會觸發 Znode 上註冊的對應事件,請求 Watch 的使用者端會接收到非同步通知。

具體互動過程如下:

  • 使用者端調⽤ getData ⽅法的時候, watch 引數設定為 true 。伺服器端接到請求,返回節點資料,並 且在對應的雜湊表⾥插⼊被 Watch的 Znode 路徑。
  • 當被 Watch 的 Znode 已刪除,伺服器端會查詢雜湊表,找到該 Znode 對應的所有

Watcher,非同步通知使用者端,並且刪除雜湊表中對應的 Key-Value。

這裡的伺服器端指的是zk的伺服器端。

使用者端使⽤了NIO通訊模式監聽伺服器端的調⽤。

二、zkCli使用者端使⽤watch

zkCli使用者端常用命令詳解:

https://www.jb51.net/article/252869.htm

  • create /test:建立test節點
  • set /test aaa:給test節點賦值aaa資料
  • get -w /test:⼀次性監聽節點,注意這裡是監聽的資料變化,假如test子節點的資料發生變化也是收不到監聽訊息的(假如在監聽節點下建立和刪除子節點這些都是監聽不到的,但是刪除監聽的節點是可以監聽到的)
  • ls -w /test :監聽⽬錄,建立和刪除⼦節點會收到通知。⼦節點中新增節點不會收到通知
  • ls -R -w /test :對於⼦節點中⼦節點的變化,但內容的變化不會收到通知

2.1、get -w命令詳解

建立一個節點後,然後通過 get -w /test監聽節點,然後使用另外一個使用者端對該節點進行了賦值,這時候可以看到收到的監聽訊息。

監聽到後並不是監聽到修改後新的值,而是類似於一個訊息,意思是告訴他節點發生變化了。這時候可以通過get /test命令來獲取節點被修改後的值。

再次使用另一個使用者端set了一下值,並沒有監聽到訊息,因為 get -w /test是⼀次性監聽節點。

假如想一直監聽的話,可以在收到監聽訊息後,立馬再執行 get -w /test命令。

刪除節點是可以監聽到的,監聽到的訊息事件型別和資料修改是不一樣的。

2.2、ls -w命令詳解

ls -w監聽當前節點的建立和刪除

又使用命令開啟了監聽,然後在剛剛建立的sub1節點下又建立了一個子節點,這時候收不到監聽的。

2.3、ls -R -w命令詳解

三、curator使用者端使⽤watch

springboot整合curator使用者端:https://www.jb51.net/article/252816.htm

我直接是基於上一篇文章當中的專案進行watch練習!

@Test
/**
  * 監聽test節點
  *
  * @throws Exception
  */
 @Test
 public void addNodeListener() throws Exception {

     NodeCache nodeCache = new NodeCache(curatorFramework, "/test");
     nodeCache.getListenable().addListener(new NodeCacheListener() {
         @Override
         public void nodeChanged() throws Exception {
             log.info("{} path nodeChanged: ", "/test");
             printNodeData();
         }
     });
     nodeCache.start();
     // 阻塞執行緒
     System.in.read();
 }

 /**
  * 獲取test節點資料並列印
  *
  * @throws Exception
  */
 public void printNodeData() throws Exception {
     byte[] bytes = curatorFramework.getData().forPath("/test");
     log.info("data: {}", new String(bytes));
 }

到此這篇關於zookeeper的watch機制原理解析的文章就介紹到這了,更多相關zookeeper watch機制內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com