ZookeeperAPI的操作

基本使用

org.apache.zookeeper.Zookeeper 是客戶端入口主類,負責建立與server的會話,它提供了表1所示幾類主要方法:

功能                                               描述
create                                      在本地目錄樹中創建一個節點
delete                                      刪除一個節點    
exists                                      測試本地是否存在目標節點
get /set data                               從目標節點上讀取/寫數據
get /set ACL                                獲取/設置目標節點訪問控制列表信息
get children                                檢索一個子節點上的列表
sync                                        等待要被傳送的數據

demo增刪改查

手動引入Zookeeper的jar包

Markdown

SimpleDemo.java

package testZK;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class SimpleDemo {
    // 會話超時時間,設置爲與系統默認時間一致
    private static final int SESSION_TIMEOUT = 30000;
    // 創建 ZooKeeper 實例
    ZooKeeper zk;
    // 創建 Watcher 實例
    Watcher wh = new Watcher() {
        public void process(org.apache.zookeeper.WatchedEvent event)
        {
            System.out.println(event.toString());
        }
    };
    // 初始化 ZooKeeper 實例
    private void createZKInstance() throws IOException
    {
        zk = new ZooKeeper("192.168.230.11:2181", SimpleDemo.SESSION_TIMEOUT, this.wh);
    }
    private void ZKOperations() throws IOException, InterruptedException, KeeperException
    {
        System.out.println("/n1. 創建 ZooKeeper 節點 (znode : zoo2, 數據: myData2 ,權限: OPEN_ACL_UNSAFE ,節點類型: Persistent");
        zk.create("/zoo2", "myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("/n2. 查看是否創建成功: ");
        System.out.println(new String(zk.getData("/zoo2", false, null)));
        System.out.println("/n3. 修改節點數據 ");
        zk.setData("/zoo2", "shenlan211314".getBytes(), -1);
        System.out.println("/n4. 查看是否修改成功: ");
        System.out.println(new String(zk.getData("/zoo2", false, null)));
        System.out.println("/n5. 刪除節點 ");
        zk.delete("/zoo2", -1);
        System.out.println("/n6. 查看節點是否被刪除: ");
        System.out.println(" 節點狀態: [" + zk.exists("/zoo2", false) + "]");
    }
    private void ZKClose() throws InterruptedException
    {
        zk.close();
    }
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        SimpleDemo dm = new SimpleDemo();
        dm.createZKInstance();
        dm.ZKOperations();
        dm.ZKClose();
    }
}

Markdown

Markdown

Zookeeper的監聽器工作機制

Markdown

監聽器是一個接口,我們的代碼中可以實現Wather這個接口,實現其中的process方法,方法中即我們自己的業務邏輯

監聽器的註冊是在獲取數據的操作中實現:
getData(path,watch?)監聽的事件是:節點數據變化事件
getChildren(path,watch?)監聽的事件是:節點下的子節點增減變化事件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章