zookeeper原生API

import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
/**
 * 
 * @author lvfang
 *
 */
public class ZookeeperDemo {

    //zookeeper地址
    static final String CONNECT_ARRD = "192.168.1.201:2181";
    //超时时间
    static final int SESSION_OUTTIME = 5000;
    //阻塞程序执行,用于等待zookeeper链接成功,发送信号
    static final CountDownLatch connectedSemaphore = new CountDownLatch(1);
    
    public static void main(String[] args) throws Exception {
        ZooKeeper zk = new ZooKeeper(CONNECT_ARRD, SESSION_OUTTIME, new Watcher(){

            @Override
            public void process(WatchedEvent event) {
                //获取时间状态
                KeeperState keeperState = event.getState();
                EventType eventType = event.getType();
                //如果建立链接了
                if(KeeperState.SyncConnected == keeperState){
                    if(EventType.None == eventType){
                        //如果建立链接成功,则发送信号,让后续阻塞程序向下执行
                        connectedSemaphore.countDown();
                        System.out.println("zk 建立链接成功!");
                    }
                }
                
                System.out.println("已经触发了" + event.getType() + "事件!");
            }
            
        });
        
        //进行阻塞
        connectedSemaphore.await();
        
        
        /**
         * 创建父节点(持久节点)
         * 参数类型:
         *      参数一:参数路径
         *      参数二:节点内容,字节类型
         *      参数三:节点权限,通用Ids.OPEN_ACL_UNSAFE
         *      参数四:节点类型,{PERSISTENT:持久节点,
         *                   PERSISTENT_SEQUENTIAL:持久顺序节点,
         *                   EPHEMERAL:临时节点,
         *                   EPHEMERAL_SEQUENTIAL:临时顺序节点}
         */
//      String result = zk.create("/lvfangPath", "lvfangdata...".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        //获取节点数据
//      System.out.println(new String(zk.getData("/lvfangPath", false, null)));
        
        /**
         * 创建子节点(临时节点/持久节点)
         *  注意:确保父节点已存在
         */
//      String result = zk.create("/lvfangPath/ChildPathOne","ChildDataOne".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
//      String result = zk.create("/lvfangPath/ChildPathOne","ChildDataOne".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        
        /**
         * 取出子目录节点列表
         */
//      List<String> none = zk.getChildren("/testRootPath", true);
//      System.out.println(none);
        
        /**
         * 修改子目录节点数据
         */
//      System.out.println(new String(zk.getData("/testRootPath/testChildPathOne", false, null)));
//      zk.setData("/testRootPath/testChildPathOne", "this is a news".getBytes(),-1);
//      System.out.println(new String(zk.getData("/testRootPath/testChildPathOne", false, null)));
        
        /**
         * 是否存在
         *      不存在:null
         *      存在:44970,44970,1487565866858,1487565866858,0,0,0,0,4,0,44970(节点信息)
         */
        //System.out.println(zk.exists("/lvfang", false));;
        
        /**
         * 删除整个子目录 -1代表version版本号,-1是删除所有版本
         */
//      zk.delete("/lvfangPath/ChildPathOne", -1);
//      System.out.println(zk.getChildren("/lvfangPath", true));
        
        
        /**
         * AsyncCallback异步
         */
        /*
        zk.delete("/lvfangPath", -1, new AsyncCallback.VoidCallback() {
            
            @Override
            public void processResult(int rc, String path, Object ctx) {
                
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(rc);
                System.out.println(path);
                System.out.println(ctx);
                
            }
        }, "A");
        System.out.println("继续执行... ...");
        Thread.sleep(50000);
        */
        
        
        
        //System.out.println(result);
        zk.close();
        
        
        /**
            create(): 发起一个create操作. 可以组合其他方法 (比如mode 或background) 最后以forPath()方法结尾

            delete(): 发起一个删除操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾

            checkExists(): 发起一个检查ZNode 是否存在的操作. 可以组合其他方法(watch 或background) 最后以forPath()方法结尾

            getData(): 发起一个获取ZNode数据的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾

            setData(): 发起一个设置ZNode数据的操作. 可以组合其他方法(version 或background) 最后以forPath()方法结尾

            getChildren(): 发起一个获取ZNode子节点的操作. 可以组合其他方法(watch, background 或get stat) 最后以forPath()方法结尾

            inTransaction(): 发起一个ZooKeeper事务. 可以组合create, setData, check, 和/或delete 为一个操作, 然后commit() 提交
          */
        
    }
}


    原文作者:先生_吕
    原文地址: https://www.jianshu.com/p/c0c54a70f2b3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞