Zookeeper Java 客户端API的使用(三)

2017-10-24  本文已影响126人  5d44bc28b93d

zookeeper java api使用简介

1.建立连接


CONNECT_HOST 服务器地址及端口 例如127.0.0.1:2181
TIMEOUT 超时时间
new JavaApiClient() watch 必须实现Watch接口

  zk = new ZooKeeper(CONNECT_HOST, TIMEOUT, new JavaApiClient());

2.获取数据


2.1 同步获取数据

  /**
     * 同步获取节点数据
     *
     * @return 节点数据
     */
    private byte[] getDataSync() {
        byte[] resdata = null;
        try {
            resdata = zk.getData("/worke_1", false, new Stat());
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return resdata;
    }

2.2 异步获取节点数据

getDataASync:

processResult:

  /**
     * 异步获取
     */
    private void getDataASync() {
        zk.getData("/worke_1", false, new GetDataCallBack(), null);
    }
    class GetDataCallBack implements AsyncCallback.DataCallback {

        public void processResult(int i, String s, Object o, byte[] bytes, Stat stat) {

        }
    }

3. 创建节点


3.1 同步创建节点

create方法:

 /**
     * 同步创建节点
     *
     * @return 节点路径
     */
    private String createNodeSync() {
        String path = null;
        try {
            path = zk.create("/worke_1", "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return path;
    }

3.2 异步创建节点

方法create:

/**
     * 异步创建节点
     */
    private void createANodeASync() {
        zk.create("/worke_1", "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL, new CreateStringCallBack(), "创建");
    }
/**
     * 异步创建调用类
     */

    class CreateStringCallBack implements AsyncCallback.StringCallback {
        /**
         * @param i  i<0创建失败 i=0 创建成功
         * @param s  节点名称
         * @param o  传入的上下文
         * @param s1 节点名称
         */
        public void processResult(int i, String s, Object o, String s1) {

           
        }
    }

4. 获取子节点列表


4.1 同步获取

getChildren:

 /**
     * 获取node节点
     *
     * @return
     */
    private List<String> listNodeSync() {
        List<String> childrens = null;
        try {
            childrens = zk.getChildren("/", false);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return childrens;
    }

4.2 异步获取

getChildren:

    private void listNodeAsync() {
            zk.getChildren("/", false, new GetCallBack(), "async get");

        }
 /**
     * 异步获取调用类
     */
    class GetCallBack implements AsyncCallback.ChildrenCallback {
        /**
         *
         * @param i i<0 获取失败 i=0成功
         * @param s s 节点
         * @param o o 上下文信息
         * @param list 子节点列表
         */
        public void processResult(int i, String s, Object o, List<String> list) {
            System.out.println("getcallback");

            System.out.println(list);

        }
    }

5.判断节点是否存在


方法exists

 /**
     * 同步判断是否存在节点
     */
    private boolean existNodeSync() {
        boolean flag = false;
        try {
            System.out.println("判断是否存在");
            Stat stat = zk.exists("/worke_1", false);
            if (stat != null) {
                flag = true;
            }
            System.out.println(stat);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return flag;
    }

6. 删除节点


6.1 同步删除节点

delete:

  /**
     * 同步删除节点
     *
     * @param path
     * @param version version参数指定要更新的数据的版本, 如果version和真实的版本不同, 删除操作将失败. 指定version为-1则忽略版本检查.
     */

    private void deleteNodeSync(String path, int version) {
        try {
            zk.delete(path, -1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (KeeperException e) {
            e.printStackTrace();
        }
    }

6.2 异步删除

delete:

/**
     * 异步删除节点
     *
     * @param path
     * @param version version参数指定要更新的数据的版本, 如果version和真实的版本不同, 删除操作将失败. 指定version为-1则忽略版本检查.
     */
    private void deleteNodeASync(String path, int version) {

        zk.delete(path, -1, new DelCallBack(), "删除");

    }
     /**
     * 删除回调
     */
    class DelCallBack implements AsyncCallback.VoidCallback {
        /**
         *
         * @param i i<0 删除失败 i=0 删除成功
         * @param s s 节点
         * @param o o 上下文信息
         */
        public void processResult(int i, String s, Object o) {

        }
    }


7. 权限设置


权限模式(scheme):ip,digest
授权对象:
ip模式:具体的ip
digest模式: username:Base64(SHA-1(username:password))

 private void createANodeASync() throws NoSuchAlgorithmException {
       //ip权限
       ACL aclIP = new ACL(ZooDefs.Perms.ADMIN, new Id("ip", "192.168.1.111"));
       //用户名密码的复合权限
       ACL aclDigest = new ACL(ZooDefs.Perms.CREATE | ZooDefs.Perms.DELETE, new Id("digest", DigestAuthenticationProvider.generateDigest("test:test")))
       ArrayList<ACL> aclList =new ArrayList<>();
       aclList.add(aclIP);
       aclList.add(aclDigest);
       zk.create("/worke_1", "123".getBytes(), aclList, CreateMode.EPHEMERAL, new CreateStringCallBack(), "创建");
   }

8. 监听事件


1.实现Watcher接口,实现process方法

 public void process(WatchedEvent watchedEvent) {
        if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
            
        }
    }

总结


上一篇 下一篇

猜你喜欢

热点阅读