zookeeper使用系列-zookeeper api使用

public class ZookeeperTest {
    public static void main(String[] args) throws Exception {

        // zookeeper连接
//        testConnect();
        // 创建节点
//        testSyncCreate();
        // 异步创建节点
//        testAsyncCreate();
        // 异步检查是否存在
//        testAsyncExists();
        // 异步获取数据
//        testAsyncGetData();
        // 异步删除
        testAsyncDelete();
    }



    public static ZooKeeper getZookeeper() throws IOException {
        return new ZooKeeper("localhost:2181", 5000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println(String.format("事件内容:%s", watchedEvent));
            }
        });
    }

    /**
     * zookeeper连接
     *
     * @throws Exception
     */
    public static void testConnect() throws Exception {
        //*****************************************************************************************************************************************************
        // 1. 创建zookeeper连接: ZooKeeper(java.lang.String connectString, int sessionTimeout, org.apache.zookeeper.Watcher watcher)
        //*****************************************************************************************************************************************************
        ZooKeeper zooKeeper = getZookeeper();
        System.out.println(zooKeeper.getState());
        Thread.sleep(5000);
        /*
        CONNECTING
        事件内容:WatchedEvent state:SyncConnected type:None path:null // 连接成功之后会触发
         */
    }

    /**
     * 同步创建
     *
     * @throws Exception
     */
    public static void testSyncCreate() throws Exception {
        //*****************************************************************************************************************************************************
        // 2.创建新节点 create(java.lang.String path, byte[] data, java.util.List<org.apache.zookeeper.data.ACL> acl, org.apache.zookeeper.CreateMode createMode)
        //*****************************************************************************************************************************************************

        // ------------------------关键属性描述---------------------
//    acl:权限列表
//          提供默认的权限OPEN_ACL_UNSAFE、CREATOR_ALL_ACL、READ_ACL_UNSAFE
//          OPEN_ACL_UNSAFE:完全开放
//          CREATOR_ALL_ACL:创建该znode的连接拥有所有权限
//          READ_ACL_UNSAFE:所有的客户端都可读
//    createMode:节点类型
//          PERSISTENT:持久化节点
//          PERSISTENT_SEQUENTIAL:持久化有序节点
//          EPHEMERAL:临时节点(连接断开自动删除)
//          EPHEMERAL_SEQUENTIAL:临时有序节点(连接断开自动删除)
        // ------------------------关键属性描述---------------------
        ZooKeeper zooKeeper = getZookeeper();
        String path = zooKeeper.create("/test", "test data".getBytes(), // 父节点一定要存在
                ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);


        System.out.println(String.format("path:%s", path));
        Thread.sleep(5000);
        /*
           [zk: localhost:2181(CONNECTED) 6] get /test
            test data
            cZxid = 0xa
            ctime = Mon Feb 18 11:12:23 CST 2019
            mZxid = 0xa
            mtime = Mon Feb 18 11:12:23 CST 2019
            pZxid = 0xa
            cversion = 0
            dataVersion = 0
            aclVersion = 0
            ephemeralOwner = 0x0
            dataLength = 9
            numChildren = 0
         */
    }


    /**
     * 异步创建
     */
    public static void testAsyncCreate() throws Exception {
        ZooKeeper zooKeeper = getZookeeper();
        zooKeeper.create("/test/a", "async data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT_SEQUENTIAL, new AsyncCallback.StringCallback() {

                    @Override
                    public void processResult(int i, String s, Object o, String s1) {
                        System.out.println("i=" + i);//创建成功返回0
                        System.out.println("s=" + s);//自定义节点名称
                        System.out.println("o=" + o);//自定义回调数据
                        System.out.println("s1=" + s1);//最终节点名称(顺序节点最终名称与自定义名称不同)
                    }
                }, "testAsync");
        Thread.sleep(5000);

        /* 打印内容---》
            事件内容:WatchedEvent state:SyncConnected type:None path:null
            i=0
            s=/test/a
            o=testAsync
            s1=/test/a0000000000
         */
    }


    /**
     * 检查是不是存在某个节点(异步)
     */
    public static void testAsyncExists() throws Exception {
        ZooKeeper zooKeeper = getZookeeper();
        zooKeeper.exists("/test", new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println(String.format("节点存在事件监听", watchedEvent));
            }
        }, new AsyncCallback.StatCallback() {
            @Override
            public void processResult(int i, String s, Object o, Stat stat) {
                System.out.println("i=" + i);//成功返回0
                System.out.println("s=" + s);//自定义节点名称
                System.out.println("o=" + o);//自定义回调数据
                System.out.println("stat=" + JSON.toJSONString(stat));// 节点状态
            }
        }, "exists context");

        Thread.sleep(5000);
    }

    /**
     * 获取数据(异步)
     * @throws Exception
     */
    public static void testAsyncGetData() throws Exception{
        ZooKeeper zooKeeper = getZookeeper();
        zooKeeper.getData("/test", new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println(String.format("getData事件监听", watchedEvent));
            }
        }, new AsyncCallback.DataCallback() {
            @Override
            public void processResult(int i, String s, Object o, byte[] bytes, Stat stat) {
                System.out.println("i=" + i);//成功返回0
                System.out.println("s=" + s);//自定义节点名称
                System.out.println("o=" + o);//自定义回调数据
                System.out.println(new String(bytes));//数据
                System.out.println("stat=" + JSON.toJSONString(stat));//节点状态
            }
        },"getData context");
        Thread.sleep(5000);
    }


    /**
     * 测试删除节点(异步)
     */
    public static void testAsyncDelete() throws Exception{
        ZooKeeper zookeeper = getZookeeper();
        // -1表示删除最新的节点
        zookeeper.delete("/test/a0000000000", -1, new AsyncCallback.VoidCallback() {
            @Override
            public void processResult(int i, String s, Object o) {
                System.out.println("i=" + i);//成功返回0
                System.out.println("s=" + s);//自定义节点名称
                System.out.println("o=" + o);//自定义回调数据
            }
        },"delete context");
        Thread.sleep(5000);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值