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();
            }
        }
    }
  • 相关阅读:
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified (转)
    android studio 编程中用到的快捷键
    java时间格式串
    android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
    linux安装vmware
    x1c 2017 安装mint18的坑——grub2
    x1c2017 8G版 win linux的取舍纠结记录
    python的try finally (还真不简单)
    kafka+docker+python
    json文件不能有注释
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/7137104.html
Copyright © 2011-2022 走看看