zookeeper --java API基本操作

org.apache.zookeeper.Zookeeper

Zookeeper 是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。

org.apache.zookeeper.Watcher

Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)

process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。

import org.apache.zookeeper.*;
import java.util.List;

/**
 * @author kismet
 * @date 2019-12-10 10:52
 */
public class zookeeperDemo1 {
    public static void main(String[] args) throws Exception {
        // 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
        ZooKeeper zk = new ZooKeeper("192.168.100.88:2181,192.168.100.89:2181,192.168.100.90:2181", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型为:" + event.getType());
                System.out.println("事件发生的路径:" + event.getPath());
                System.out.println("通知状态为:" +event.getState());
            }
        });
//        create01(zk);
//        create02(zk);
//        getData(zk);
//        getchildren(zk);
//        setdata(zk);
//        create03(zk);
        deleta(zk);
    }


    /**
     * 创建my节点,节点内容为"ssss"
     * @param zk
     */
    public static void create01(ZooKeeper zk) throws Exception {
        zk.create("/my", "ssss".getBytes("UTF-8"), ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT);
        zk.close();
    }

    /**
     * 创建my的子节点,节点内容为"我是my的儿子",并且输出父目录的内容
     * @param zk
     * @throws Exception
     */
    public static void create02(ZooKeeper zk) throws Exception {
        zk.create("/my/mysun","我是my的儿子".getBytes("UTF-8"),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        System.out.println("---->"+new String(zk.getData("/my",false,null)));
        zk.close();
    }

    /**
     * 输出myGirls节点的内容
     * @param zk
     * @throws Exception
     */
    public static void getData(ZooKeeper zk) throws Exception {
        String data = new String(zk.getData("/myGirls", false, null));
        System.out.println("/myGirls节点的内容是:"+data);
    }


    /**
     * 获取/my节点的所有子目录
     * @param zk
     * @throws Exception
     */
    public static void getchildren(ZooKeeper zk) throws Exception {
        List<String> children = zk.getChildren("/my", true);
        System.out.println(children);
    }

    /**
     * 修改子目录数据
     * @param zk
     * @throws Exception
     */
    public static void setdata(ZooKeeper zk) throws Exception {
        zk.setData("/my/mysun","sunsunsun".getBytes(),-1);
        System.out.println("目录状态:"+zk.exists("/my",true));
    }

    /**
     * 创建第二个子节点,并且输出新节点的内容
     * @param zk
     * @throws Exception
     */
    public static void create03(ZooKeeper zk) throws Exception {
        zk.create("/my/mysun2","sun222222".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
        System.out.println("新节点内容:"+new String(zk.getData("/my/mysun2",true,null)));
    }

    /**
     * 删除一个子节点
     * @param zk
     * @throws Exception
     */
    public static void deleta(ZooKeeper zk) throws Exception {
        zk.delete("/my/mysun",-1);
    }

}
发布了80 篇原创文章 · 获赞 168 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_44036154/article/details/103479479