zookeeper基本操作

启动zookeeper
zkServer.sh start
进入命令行模式
zkCli.sh
zookeeper基本操作

create /gz 01			创建节点

get /gz			查看节点

stat /gz			查看状态
create /gz/dashuju "wangkunhua"			创建子节点

crcreate -e /gz/sahngxi 40  创建临时节点-e(退出去进来的话节点将不会存在了)

create -s /gz/java 20			创建有序节点-s

delect /gz/dsj			删除节点 可能会有延迟

rmr /gz			递归删除新版本是  deleteall /gz

代码实现增删改查监听

package g4.cn;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;

import java.io.IOException;
import java.util.List;


public class CRUDDemo {
    private static final String CONN_STR="hadoop1:2181";
    @Test
    //创建数据
    public void testCreate(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000,null);
            zk.create("/x", "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            zk.close();
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
}

    @Test
    //    修改数据
    public void testSet(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000,null);
            //-1代表任意版本号
            zk.setData("/x", "333".getBytes(), -1);
            zk.close();
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
    @Test
    //    查看数据
    public void testGet(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000,null);
            Stat stat = new Stat();
            byte[] data = zk.getData("/x",null, stat);
            System.out.println(new String(data));
            System.out.println(stat.getVersion());
            zk.close();
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
    @Test
    //    删除数据
    public void testDelete(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000,null);
            zk.delete("/x", -1);
            zk.close();
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
    @Test
    //    监听数据(触发一次)
    //服务端输入 set /x "234" 触发回调
    public void testWatch01(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000,null);
            Stat stat = new Stat();
            byte[] data = zk.getData("/x", new Watcher(){
            @Override
            public void process(WatchedEvent event){
                System.out.println("被回调了01--------");
            }}, stat);
            System.out.println(new String(data));
            System.out.println(stat.getVersion());
            Thread.sleep(Long.MAX_VALUE);
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

    @Test
    //    监听数据
    public void testWatch02(){
        try {
            ZooKeeper zk = new ZooKeeper(CONN_STR,5000, new Watcher(){
                @Override
                public void process(WatchedEvent event){
                    System.out.println("被回调了02--------");
                }});
            List<String> children = zk.getChildren("/x", true);
            for (String node :children){
                System.out.println(node);
            }
            Thread.sleep(Long.MAX_VALUE);
        }catch (IOException e){
            e.printStackTrace();
        }catch (KeeperException e){
            e.printStackTrace();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}