zoukankan      html  css  js  c++  java
  • Zookeeper Zkclient客户端

      Zkclient是对Zookeeper的原生API进行了包装,实现了超时重连、Watcher反复注册等功能,它可以实现递归创建,删除节点,但是zkClient不能递归给节点赋值。

    主要的api如下:

      创建永久节点:

      public void createPersistent(String path)

      public void createPersistent(String path, Object data)

      public void createPersistent(String path, Object data, List<ACL> acl)  

      创建临时节点:

      public void createEphemeral(final String path)

      public void createEphemeral(final String path, final Object data)

      public void createEphemeral(final String path, final Object data, final List<ACL> acl)

      删除节点:

      public boolean delete(final String path)

      public boolean delete(final String path, final int version)

      public boolean deleteRecursive(String path)(递归删除节点,在原生api,如果一个节点存在子节点,那么它将无法直接删除,必须一层层遍历先删除全部子节点,然后才能将目标节点删除)

      读取节点:

      public List<String> getChildren(String path)

      更新数据:

      public void writeData(String path, Object object)

      public void writeData(final String path, Object datat, final int expectedVersion)

      判断节点是否存在:

      protected boolean exists(final String path, final boolean watch)

      注册监听事件:

      ZkClient的subscribeChildChanges方法  

      ZkClient的subscribeDataChanges方法

      下面看一个测试,首先导入包:

    <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.5.0</version>
     </dependency>
     <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
     </dependency>
    package com.test.protobuf;
    
    import org.I0Itec.zkclient.IZkChildListener;
    import org.I0Itec.zkclient.IZkDataListener;
    import org.I0Itec.zkclient.ZkClient;
    
    import java.util.List;
    
    /**
     * Created by szekinwin on 2017/7/8.
     */
    public class ZkClientDemo {
    
        //zookeeper连接地址
        private static final String CONNECT_ADR="172.31.19.222:2181,172.31.19.223:2181,172.31.19.234:2181";
    
        public static void main(String[]args){
    
            //5000,连接超时时间
            ZkClient zkClient = new ZkClient(CONNECT_ADR,5000);
    
            System.out.println("Connect successfully..");
    
            String path="/testRoot";
            //监听节点  subscribeChildChanges 监听当前节点以及子节点增加或者删除
            zkClient.subscribeChildChanges(path, new IZkChildListener() {
                public void handleChildChange(String s, List<String> list) throws Exception {
                    System.out.println("路径:"+s);
                    System.out.println("变更的节点为:"+list);
                }
            });
            //监听节点  subscribeDataChanges 监听当前节点以及子节点内容的变更
            zkClient.subscribeDataChanges(path, new IZkDataListener() {
                public void handleDataChange(String s, Object o) throws Exception {
                    System.out.println("路径:"+s);
                    System.out.println("变更的内容为:"+o.toString());
                }
    
                public void handleDataDeleted(String s) throws Exception {
                    System.out.println("路径:"+s);
                }
            });
            //创建节点 true表示递归创建
            zkClient.createPersistent("/testRoot/children",true);
            //修改节点信息
            zkClient.writeData("/testRoot","testRoot");
            zkClient.writeData("/testRoot","new testRoot");
            //修改子节点信息
            zkClient.writeData("/testRoot/children","testRoot children");
            //递归删除节点
            zkClient.deleteRecursive(path);
            try {
                Thread.sleep(50000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    PHP获取一周的日期
    关系型数据库和非关系型数据库的区别和特点
    关系型数据库和非关系型数据库的特性以及各自的优缺点
    什么是数据库?什么是关系数据库?什么是非关系型数据库?
    PHP中把对象转数组的几个方法
    验证银行卡号
    xss过滤方法
    PHP 随机字符
    计算两个日期相差年月日
    判断一个时间段是否包含周末
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/7137104.html
Copyright © 2011-2022 走看看