Java API操作ZK node

来源:互联网 发布:线正数据采集处理系统 编辑:程序博客网 时间:2024/06/06 17:57

创建会话

  • 建立简单连接
/** * 测试创建Zk会话 * Created by liuhuichao on 2017/7/25. */public class ZooKeeper_Constructor_Usage_Simple implements Watcher {    private static CountDownLatch connectedSemaphore=new CountDownLatch(1);    public static void main(String[] args) throws Exception{        ZooKeeper zk=new ZooKeeper("192.168.99.215:2181",5000,new ZooKeeper_Constructor_Usage_Simple());        System.out.println(zk.getState());        connectedSemaphore.await();        System.out.println("zk session established");    }    /**     * 处理来自ZK服务端的watcher通知     * @param watchedEvent     */    @Override    public void process(WatchedEvent watchedEvent) {        System.out.println("receive watched event:"+watchedEvent);        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            connectedSemaphore.countDown();//解除等待阻塞        }    }}
  • 复用会话
/** * 复用sessionId和sessionPassword的会话 * Created by liuhuichao on 2017/7/25. */public class ZooKeeper_Constructor_Usage_With_sid_password implements Watcher {    private static CountDownLatch connectedSemaphore=new CountDownLatch(1);    @Override    public void process(WatchedEvent watchedEvent) {        System.out.println("receive watched event:"+watchedEvent);        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            connectedSemaphore.countDown();        }    }    public static void main(String[] args) throws Exception{        ZooKeeper zooKeeper=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_Constructor_Usage_With_sid_password());        connectedSemaphore.await();        long sessionId=zooKeeper.getSessionId();        byte[] password=zooKeeper.getSessionPasswd();        /**使用错误的sessionID跟sessionPwd连连接测试[192.168.99.215 lhc-centos0]**/        ZooKeeper zkWrong=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_Constructor_Usage_With_sid_password(),1l,"lhc".getBytes());        /**使用正确的来进行连接**/        ZooKeeper zkTrue=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_Constructor_Usage_With_sid_password(),sessionId,password);        Thread.sleep(Integer.MAX_VALUE);    }}

创建节点

  • 使用同步API创建节点
/** * 使用同步API创建一个节点 * Created by liuhuichao on 2017/7/25. */public class ZooKeeper_Create_API_Sync_Usage implements Watcher {    private static CountDownLatch connectedSemaphore=new CountDownLatch(1);    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            connectedSemaphore.countDown();        }    }    public static void main(String[] args) throws Exception{        ZooKeeper zooKeeper=new ZooKeeper("192.168.99.215:2181",5000,new ZooKeeper_Create_API_Sync_Usage());        connectedSemaphore.await();        String path1=zooKeeper.create("/zk-test1","lhc".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);//临时结点        System.out.println(path1+" 创建成功!");        String path2=zooKeeper.create("/zk-test2","lllhhhhhhhhhhhhhhhhc".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);        System.out.println(path2+"  创建成功!");    }}
  • 使用异步API创建一个节点
/** * 使用异步API创建一个节点 * Created by liuhuichao on 2017/7/25. */public class ZooKeeper_Create_API_ASync_Usage implements Watcher{    private static CountDownLatch connectedSamphore=new CountDownLatch(1);    @Override    public void process(WatchedEvent watchedEvent) {        if(watchedEvent.getState()== Event.KeeperState.SyncConnected){            connectedSamphore.countDown();        }    }    public static void main(String[] args) throws Exception{        ZooKeeper zk1=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_Create_API_ASync_Usage());        connectedSamphore.await();        zk1.create("/zk-test-1","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT,new IStringCallBack(),"i am a context");        zk1.create("/zk-test-2","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT,new IStringCallBack(),"i am a context");        zk1.create("/zk-test-3","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT_SEQUENTIAL,new IStringCallBack(),"i am a context");        Thread.sleep(Integer.MAX_VALUE);    }}/** * Created by liuhuichao on 2017/7/26. */public class IStringCallBack implements AsyncCallback.StringCallback{        @Override        public void processResult(int rc, String path, Object ctx, String name) {            System.out.println("result:"+rc+"; path="+path+" ctx="+ctx+" name = "+name);        }}

删除节点

/** * 删除zk的持久结点 * Created by liuhuichao on 2017/7/26. */public class ZooKeeperDeleteNode implements Watcher {    private  static CountDownLatch conntedSamphore=new CountDownLatch(1);    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            conntedSamphore.countDown();        }    }    public static void main(String[] args) throws Exception{        /**同步删除节点**/        ZooKeeper zooKeeper=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeperDeleteNode());        conntedSamphore.await();        zooKeeper.delete("/zk-test-30000000014",0);    }}

读取数据

  • 使用同步API获取子节点列表
/** *获取结点-同步 * Created by liuhuichao on 2017/7/26. */public class ZooKeeper_GetChildren_API_Sync_Usage implements Watcher {    private  static CountDownLatch conntedSamphore=new CountDownLatch(1);    private static ZooKeeper zooKeeper=null;    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            conntedSamphore.countDown();        }else if(watchedEvent.getType()== Event.EventType.NodeChildrenChanged){            try {                System.out.println("--------------------------------------reget children:"+zooKeeper.getChildren(watchedEvent.getPath(),true));            } catch (KeeperException e) {                e.printStackTrace();            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) throws Exception{        String path="/zk-test-1";        zooKeeper=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_GetChildren_API_Sync_Usage());        conntedSamphore.await();        zooKeeper.create(path+"/test1","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);        List<String> childrenList=zooKeeper.getChildren(path,true);        System.out.println(childrenList);        zooKeeper.create(path+"/test2","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);        Thread.sleep(Integer.MAX_VALUE);    }}
  • 使用异步API获取子节点列表
** * 异步获取结点 * Created by liuhuichao on 2017/7/26. */public class ZooKeeper_GetChildren_API_ASync_Usage implements Watcher {    private static CountDownLatch connectedSemphore=new CountDownLatch(1);    private static ZooKeeper zk=null;    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            connectedSemphore.countDown();        }else if(watchedEvent.getType()== Event.EventType.NodeChildrenChanged){            try {                System.out.println("node changed===="+zk.getChildren(watchedEvent.getPath(),true));            } catch (KeeperException e) {                e.printStackTrace();            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) throws Exception{        String path="/zk-test-1";        zk=new ZooKeeper("lhc-centos0:2181",5000,new ZooKeeper_GetChildren_API_ASync_Usage());        connectedSemphore.await();        zk.create(path+"/test3","".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);        zk.getChildren(path,true,new ICChild2Callback(),null);        Thread.sleep(Integer.MAX_VALUE);    }}/** * 异步获取结点回调接口 * Created by liuhuichao on 2017/7/26. */public class ICChild2Callback implements AsyncCallback.Children2Callback{    @Override    public void processResult(int rc, String path, Object ctx, List<String> children, Stat stat) {        System.out.println("get children zonde result:[reponse code:"+rc+" path="+path+" ctx="+ctx+"  childrenlist="+children+" stat="+stat);    }}
  • 使用同步API获取结点数据
/** * * 同步获取数据 * Created by liuhuichao on 2017/7/27. */public class GetData_API_Sync_Usage  implements Watcher{    private static CountDownLatch conntedSamphore=new CountDownLatch(1);    private static ZooKeeper zk=null;    private static Stat stat=new Stat();    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            conntedSamphore.countDown();        }else if(watchedEvent.getType()== Event.EventType.NodeCreated){            System.out.println("node changed:"+watchedEvent.getPath());        }    }    public static void main(String[] args) throws Exception{        String path="/test-1";       zk =new ZooKeeper("rc-zkp-datn-rse-nmg-ooz-woasis:2181",5000,new GetData_API_Sync_Usage());        conntedSamphore.await();        System.out.println("zk-19 连接成功!");        //zk.create(path+"/lhc", "".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);        List<String> children=zk.getChildren(path,new GetData_API_Sync_Usage());        System.out.println("children node:"+children);        zk.setData(path+"/lhc","memeda".getBytes(),-1);        byte[] nodeValue=zk.getData(path+"/lhc",true,stat);        System.out.println(new String(nodeValue));    }}
  • 使用异步API获取结点数据
/** * * 同步/异步获取数据 * Created by liuhuichao on 2017/7/27. */public class GetData_API_Sync_Usage  implements Watcher{    private static CountDownLatch conntedSamphore=new CountDownLatch(1);    private static ZooKeeper zk=null;    private static Stat stat=new Stat();    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            conntedSamphore.countDown();        }else if(watchedEvent.getType()== Event.EventType.NodeCreated){            System.out.println("node changed:"+watchedEvent.getPath());        }    }    public static void main(String[] args) throws Exception{        String path="/test-1";       zk =new ZooKeeper("rc-zkp-datn-rse-nmg-ooz-woasis:2181",5000,new GetData_API_Sync_Usage());        conntedSamphore.await();        System.out.println("zk-19 连接成功!");        //zk.create(path+"/lhc", "".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);        List<String> children=zk.getChildren(path,new GetData_API_Sync_Usage());        System.out.println("children node:"+children);        zk.setData(path+"/lhc","lllhc".getBytes(),-1);        zk.getData(path+"/lhc",true,new IDataCallback(),null);//异步获取数据        Thread.sleep(Integer.MAX_VALUE);    }}/** * 异步获取node数据回调 * Created by liuhuichao on 2017/7/27. */public class IDataCallback implements AsyncCallback.DataCallback {    @Override    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {        System.out.println("rc="+rc+" ;path="+path+" ;ctx="+ctx+" ;data="+data+" ;stat="+stat);        System.out.println("string data="+new String(data));        System.out.println("max version="+stat.getVersion());    }}

更新数据

  • 同步设置数据
  zk.setData(path+"/lhc","lllhc".getBytes(),-1);//同步设置数据
  • 异步设置数据
/** * * 同步/异步获取数据 * Created by liuhuichao on 2017/7/27. */public class GetData_API_Sync_Usage  implements Watcher{    private static CountDownLatch conntedSamphore=new CountDownLatch(1);    private static ZooKeeper zk=null;    private static Stat stat=new Stat();    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            conntedSamphore.countDown();        }else if(watchedEvent.getType()== Event.EventType.NodeCreated){            System.out.println("node changed:"+watchedEvent.getPath());        }    }    public static void main(String[] args) throws Exception{        String path="/test-1";       zk =new ZooKeeper("rc-zkp-datn-rse-nmg-ooz-woasis:2181",5000,new GetData_API_Sync_Usage());        conntedSamphore.await();        System.out.println("zk-19 连接成功!");        //zk.create(path+"/lhc", "".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);        List<String> children=zk.getChildren(path,new GetData_API_Sync_Usage());        System.out.println("children node:"+children);        //zk.setData(path+"/lhc","lllhc".getBytes(),-1);//同步设置数据        zk.setData(path+"/lhc","lhc".getBytes(),-1,new IStatCallback(),null);        zk.getData(path+"/lhc",true,new IDataCallback(),null);//异步获取数据        Thread.sleep(Integer.MAX_VALUE);    }}/** * 异步设置数据回调接口 * Created by liuhuichao on 2017/7/27. */public class IStatCallback implements AsyncCallback.StatCallback{    @Override    public void processResult(int rc, String path, Object ctx, Stat stat) {        System.out.println("rc="+rc+" ;path="+path+" ;ctx="+ctx+" ;stat="+stat);        if(rc==0){            System.out.println("数据设置成功!");        }    }}

检测节点是否存在

/** * 检测zk node * Created by liuhuichao on 2017/7/27. */public class Exist_API_Sync_Usage implements Watcher{    private static CountDownLatch connetedSamphore=new CountDownLatch(1);    private static ZooKeeper zk=null;    @Override    public void process(WatchedEvent watchedEvent) {        if(Event.KeeperState.SyncConnected==watchedEvent.getState()){            connetedSamphore.countDown();        }else if(Event.EventType.NodeCreated==watchedEvent.getType()){            System.out.println("node created=="+watchedEvent.getPath());        }else if(Event.EventType.NodeDataChanged==watchedEvent.getType()){            System.out.println("node changed=="+watchedEvent.getPath());        }else if(Event.EventType.NodeDeleted==watchedEvent.getType()){            System.out.println("node deleted=="+watchedEvent.getPath());        }    }    public static void main(String[] args)throws Exception {        String path="/test-1";        zk =new ZooKeeper("rc-zkp-datn-rse-nmg-ooz-woasis:2181",5000,new Exist_API_Sync_Usage());        connetedSamphore.await();        System.out.println("zk-19 连接成功!");        Stat stat=zk.exists(path,new Exist_API_Sync_Usage());        System.out.println("stat="+stat==null?"为空":"不为空");        zk.setData(path,"".getBytes(),-1);        Thread.sleep(Integer.MAX_VALUE);    }}
原创粉丝点击