ZooKeeper學習之路 (五)ZooKeeper API的簡單使用 增刪改查


zookeeper文件系統的增刪改查

public class ZKDemo1 {
    
    private static final String CONNECT_STRING = "hadoop1:2181,hadoop2:2181,hadoop3:2181";
    //如果zookeeper使用的是默認端口的話,此處可以省略端口號
    //private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3";
    
    //設置超時時間
    private static final int SESSION_TIMEOUT = 5000;
    
    public static void main(String[] args) throws Exception {
        //獲取zookeeper的連接
        //沒有配置監聽的話,最后一個參數設為null
        ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, null);
        
        
        
        //創建一個節點
        /**
         * 四個參數path, data, acl, createMode
         * path:創建節點的絕對路徑
         * data:節點存儲的數據
         * acl:權限控制
         * createMode:節點的類型----永久、臨時    有編號的、沒有編號的
         * 
         * */
        //String create = zk.create("/xx", "xx".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        //System.out.println(create);//輸出的結果是:/xx0000000008
        
        /**
         * 判斷節點是否存在
         * */
        Stat exists = zk.exists("/xx0000000008", null);
        if(exists == null) {
            System.out.println("節點不存在");
        }else {
            System.out.println("節點存在");
        }
        
        
        /**
         * 查看節點的數據
         * 
         * */
        /*byte[] data = zk.getData("/xx0000000008", false, null);
        System.out.println(new String(data));*/
        
        
        /**
         * 修改節點的數據
         * */
        /*Stat setData = zk.setData("/xx0000000008", "xyz".getBytes(), -1);
        if(setData == null) {
            System.out.println("節點不存在 --- 修改不成功");
        }else {
            System.out.println("節點存在 --- 修改成功");
        }*/
        
        
        /**
         * 刪除節點
         * */
        
        /*zk.delete("/xx0000000008", -1);*/
        
        
        
        
        //關閉zookeeper的連接
        zk.close();
    }

}

監聽設置

 1 public class ZKDemo2 {
 2     
 3     private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3";
 4     private static final int SESSION_TIMEOUT = 5000;
 5     
 6     public static void main(String[] args) throws Exception {
 7 
 8         // 獲取連接
 9         // 當前的這個匿名內部類不是已經添加好的監聽, 以后只要是當前這個zk對象添加了任何的監聽器響應了之后,都會調用這個process方法
10         ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new Watcher() {
11             
12             @Override
13             public void process(WatchedEvent event) {
14                 
15                 System.out.println("1111111111111111111111");
16                 KeeperState state = event.getState();
17                 String path = event.getPath();
18                 EventType type = event.getType();
19                 
20                 System.out.println(state+"\t"+path+"\t"+type);
21             }
22         });
23         
24         System.out.println("2222222222222222222222");
25         
26         /**
27          * 注冊監聽
28          * 第二個參數有三種傳法:
29          * 
30          * 1、false, 表示不使用監聽器
31          * 
32          * 2、watcher對象, 表示當前的這次監聽如果響應不了的話,就會回調當前這個watcher的process方法
33          * 
34          * 3、true,  表示如果當前的會話/zk 所注冊或者添加的所有的監聽器的響應,都會會調用 獲取連接時  初始化的 監聽器對象中 的 process 方法
35          */
36         zk.getData("/a/c", true, null);
37         
38         System.out.println("3333333333333333333333333333");
39         Thread.sleep(5000);
40         
41         zk.setData("/a/c", "hehe666".getBytes(), -1);
42         
43         System.out.println("4444444444444444444444444444");
44         
45         zk.close();
46         
47         
48         
49     }
50 
51 }

輸出結果

2222222222222222222222
1111111111111111111111
SyncConnected    null    None
3333333333333333333333333333
1111111111111111111111
SyncConnected    /a/c    NodeDataChanged
4444444444444444444444444444

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM