Zookeeper之常用API詳解

1、創建ZNode

①命令行方式

  • 在根目錄下創建“FZnode"節點並存儲數據”First Znode":
       create /FZnode "First Znode"
  • 在根目錄下創建短暫的Znode節點
       create -e /SZnode "Secondary Znode"
  • 創建短暫有序列的Znode節點
       create -e -s /EZnode "Ephemeral_SEQUENTIAL"
  • 創建持久有序列的Znode節點
       create -s /PZnode "PERSISTENT_SEQUENTIAL"

②JAVA調用API

    /**
     * 創建ZNode節點
     * @throws Exception
     */
    @Test
    public void create() throws Exception{
        //用於停止(等待)主進程,直到客戶端與Zookeeper集合連接。
        final CountDownLatch cd = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181",5000,new Watcher(){
            //watcher返回Zookeeper連接狀態
            public void process(WatchedEvent watchedEvent) {
                System.out.println(watchedEvent.getState());
                //連接建立,回調process接口時,其watchedEvent.getState() 爲 Event.KeeperState.SyncConnected
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
                    //喚醒wait中的線程
                    cd.countDown();
                }
            }
        });
        cd.await();
        /**
         * 1、Znode節點路徑
         * 2、Znode節點內容
         * 3、Znode創建節點的訪問控制列表
         * 4、Znode狀態,有四種狀態
         */
        zk.create("/APIjava",new String("test API").getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
    }

2、獲取ZNode數據
①、命令行方式
      get /FZnode
②、JAVA調用API

    /**
     * 獲取Znode數據
     */
    @Test
    public void getData() throws Exception {
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181", 5000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState()==Event.KeeperState.SyncConnected){
                    countDownLatch.countDown();
                }
            }
        });
        countDownLatch.await();
        byte[] data = zk.getData("/apijava", false, new Stat());
        System.out.println(new String(data));
    }

3、給ZNode設置內容
①、命令行方式
      set /FZnode "Set Data"
②、JAVA調用API
    /**
     * 給Znode設置數據
     * @throws Exception
     */
    @Test
    public void setData() throws  Exception{
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181", 5000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
                    countDownLatch.countDown();
                }
            }
        });
        countDownLatch.await();
        /**
         * 1表示當前Znode版本,每當數據更改時,Zookeeper會更新Znode的版本號.
         */
        zk.setData("/apijava",new String("API SET").getBytes(),1);
    }
4、列出ZNode下的的子節點
①、命令行方式
      ls /FZnode
②、JAVA調用API
    /**
     * 獲取Znode所有的子節點
     */
    @Test
    public void getChild()throws Exception{
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181", 5000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
                    countDownLatch.countDown();
                }
            }
        });
        countDownLatch.await();
        List<String> children = zk.getChildren("/apijava", false);
        for (int i = 0; i < children.size(); i++) {
            System.out.println(children.get(i));
        }
    }
5、刪除ZNode節點
①、命令行方式
       rmr /FZnode
②、JAVA調用API
    /**
     * 刪除指定Znode,並且該Znode沒有子項
     * @throws Exception
     */
    @Test
    public void delete() throws  Exception{
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181", 5000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected  ){
                    countDownLatch.countDown();
                }
            }
        });
        countDownLatch.await();
        zk.delete("/APIjava0000000012",0);
    }
6、判斷ZNode是否存在:
    /**
     * 檢查Znode是否存在
     */
    @Test
    public void exists() throws Exception {
        final CountDownLatch  countDownLatch = new CountDownLatch(1);
        ZooKeeper zk = new ZooKeeper("centos75:2181,centos76:2181,centos77:2181", 5000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
                    countDownLatch.countDown();
                }
            }
        });
        countDownLatch.await();
        Stat stat = zk.exists("/apijava", false);
        if(stat == null){
            System.out.println("Znode節點不存在");
        }else {
            System.out.println("Znode節點存在,並且版本是:"+stat.getVersion());
        }
    }
7、總結:
  • 梳理筆記,加強記憶及理解。
  • 鞏固基礎,勇攀高峯!!!
  • 加油(ง •_•)ง(ง •_•)ง(ง •_•)ง

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