JAVA操作Zookeeper

一、創建節點,提供了兩套創建節點的方法,同步和異步創建

1)、同步方式:

  • 參數1,節點路徑(名稱);/nodeName(不允許遞歸創建節點,也就是說在父節點不存在的情況下,不允許創建子節點);
  • 參數2,節點內容,要求類型是字節數組(也就是說,不支持序列化方式,如果需要實現序列化,可以使用Java相關的序列化框架,如Hessian、Kryo框架);
  • 參數3,節點權限,使用Ids.OPEN_ACL_UNSAFE開放權限即可。(這個參數一般在權限沒有太高要求的場景下,沒必要關注)
  • 參數4,節點類型,創建節點的類型,CreateNode.*,提供了四種:PERSISTENT(持久節點)、PERSISTENT_SEUENTIAL(持久順序節點)、EPHEMERAL(臨時節點)、EPHEMERAL_SEQUENTIAL(臨時順序節點)

2)、異步方式:

  1. 參數5,註冊一個異步回調函數,要實現AsynCallBack.StringCallBack接口,重寫processResult(int rc,String path,Object ctx,String name)方法,當節點創建完畢執行此方法。
    1、rc:爲服務端響應碼,0表示調用成功,-4表示端口連接,-110表示指定節點存在,-112表示會話已經過期;
    2、path:接口調用時傳入API的數據節點的路徑參數;
    3、ctx:爲調用接口傳入API的ctx值;
    4、name:實際在服務器端創建節點的名稱;
  2. 參數6,傳遞給回調函數的參數,一般爲上下文(Context)信息。

二、Watcher、ZK狀態、時間類型

1、zookeeper有watch事件,是一次性觸發的,當watch監視的數據發生變化時,通知設置了該watch的client,即watcher。同樣,其watcher是監聽數據發送了某些變化,那麼就一定會有對應的事件類型和狀態類型。

  • 事件類型:(znode節點相關的)
    EventType.NodeCreated
    EventType.NodeDataChanged
    EventType.NodeChildrenChanged
    EventType.NodeDeleted

  • 狀態類型:(是跟客戶端實例相關的)
    KeeperState.Disconnected
    KeeperState.SyncConnected
    KeeperState.AuthFailed
    KeeperState.Expired

2、watcher的特性:一次性、客戶端串行執行、輕量。

  • 一次性:對於ZK的watcher,你只需要記住一點:zookeeper有watch事件,是一次性觸發的,當watch監視的數據發生變化時,通知設置了該watch的client,即watcher,由於zookeeper的監控都是一次性的,所以每次都必須設置監控。
  • 客戶端串行執行:客戶端Wacher回調的過程是一個串行同步的過程,這爲我們保證了順序,同時需要開發人員注意一點,千萬不要因爲一個Watcher的處理邏輯影響了整個客戶端的Watcher回調。
  • 輕量:WatcherEvent是Zookeeper整個Watcher通知機制的最小通知單元,整個框架結構只包含三部分:通知狀態、事件類型和節點路徑。也就是說Watcher通知非常的簡單,只會告訴客戶端發生了事件而不會告知其具體內容,需要客戶自己去進行獲取,比如NodeDataChanged事件,Zookeeper只會通知客戶端指定節點的數據發生了變更,而不會直接提供具體的數據內容。
    3、管理工具:與eclipse集成的管理zookeeper工具:zookeeperBrowser
    http://www.massedynamic.org/eclipse/updates/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章