ZooKeeper示例

来源:互联网 发布:apache cxf 2.5.9下载 编辑:程序博客网 时间:2024/04/29 05:42


一、创建会话

1. 创建一个基本的ZooKeeper会话实例

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;/** * 创建一个基本的ZooKeeper会话实例 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    /**     * ZooKeeper客户端和服务器会话的建立是一个异步的过程     * 构造函数在处理完客户端的初始化工作后立即返回,在大多数情况下,并没有真正地建立好会话     * 当会话真正创建完毕后,Zookeeper服务器会向客户端发送一个事件通知     */    ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    System.out.println("State1: " + zk.getState());// CONNECTING        connectedSignal.await();    System.out.println("State2: " + zk.getState());// CONNECTED        zk.close();    System.out.println("State3: " + zk.getState());// CLOSED  }}

2. 创建一个复用sessionId和sessionPasswd的Zookeeper对象示例

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;/** * 创建一个复用sessionId和sessionPasswd的Zookeeper对象示例 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    connectedSignal.await();    long sessionId = zk.getSessionId();    byte[] passwd = zk.getSessionPasswd();    zk.close();    final CountDownLatch anotherConnectedSignal = new CountDownLatch(1);    ZooKeeper newZk = new ZooKeeper(        "192.168.1.109:2181",         5000,         new Watcher() {          @Override          public void process(WatchedEvent event) {            if (event.getState() == KeeperState.SyncConnected) {              anotherConnectedSignal.countDown();            }          }        },        sessionId,         passwd);    anotherConnectedSignal.await();    newZk.close();  }}

二、创建节点

1. 使用同步API创建一个ZNode节点

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;/** * 使用同步API创建一个ZNode节点 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);       ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    connectedSignal.await();    String path = zk.create(        "/zk-huey",         "hello".getBytes(),         Ids.OPEN_ACL_UNSAFE,         CreateMode.PERSISTENT    );    System.out.println(path + " is created.");    zk.close();  }}

2. 使用异步API创建一个ZNode节点

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;/** * 使用异步API创建一个ZNode节点 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);       ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    connectedSignal.await();    zk.create(        "/zk-huey",         "hello".getBytes(),         Ids.OPEN_ACL_UNSAFE,         CreateMode.PERSISTENT_SEQUENTIAL,        new AsyncCallback.StringCallback() {          @Override          public void processResult(int rc, String path, Object ctx, String name) {            // 服务器响应吗            System.out.println("ResultCode: " + rc);            // 接口调用时传入API的数据节点的路径参数值            System.out.println("Znode: " + path);            // 接口调用时传入API的ctx参数值            System.out.println("Context: " + (String)ctx);            // 实际在服务端创建的节点名            System.out.println("Real Path: " + name);          }        },        "The Context"    );    zk.close();  }}

三、删除节点

1. 使用同API删除一个ZNode节点

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;/** * 使用同步API删除一个ZNode节点 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);       ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    connectedSignal.await();    zk.delete("/zk-huey", -1);    zk.close();  }}

2. 使用异步API删除一个ZNode节点

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.KeeperState;/** * 使用异步API删除一个ZNode节点 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);       ZooKeeper zk = new ZooKeeper("192.168.1.109:2181", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          connectedSignal.countDown();        }      }    });    connectedSignal.await();    zk.delete(        "/zk-huey",         -1,        new AsyncCallback.VoidCallback() {          @Override          public void processResult(int rc, String path, Object ctx) {            System.out.println("ResultCode: " + rc);            System.out.println("Znode: " + path);            System.out.println("Context: " + (String)ctx);          }        },        "The Context"    );    zk.close();  }}

四、获取子节点列表

1. 使用同步API获取子节点列表

package com.huey.dream.demo;import java.util.List;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.data.Stat;/** * 使用同步API获取子节点列表 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, null);    zk.register(new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          if (event.getType() == EventType.None              && event.getPath() == null) {            connectedSignal.countDown();          } else if (event.getType() == EventType.NodeChildrenChanged) {            try {              System.out.println("NodeChildrenChanged.");              List<String> children = zk.getChildren(event.getPath(), true);              System.out.println("Children: " + children);            } catch (KeeperException e) {              e.printStackTrace();            } catch (InterruptedException e) {              e.printStackTrace();            }          }        }      }    });    connectedSignal.await();    zk.create("/zk-huey", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    zk.create("/zk-huey/node1", "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    zk.create("/zk-huey/node2", "node2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    Stat stat = new Stat();    List<String> children = zk.getChildren("/zk-huey",         true,// 注册默认的Watcher,当子节点类别发送变更的话,向客户端发送通知        stat// 用于描述节点状态信息    );    System.out.println("Stat: " + stat);    System.out.println("Children: " + children);    zk.create("/zk-huey/node3", "node3".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    Thread.sleep(10 * 1000);    zk.close();  }}

结果输出:

Stat: 4294967436,4294967436,1425201236879,1425201236879,0,2,0,0,4,2,4294967438Children: [node2, node1]NodeChildrenChanged.State: CONNECTEDChildren: [node2, node3, node1]

2. 使用异步API获取子节点列表

package com.huey.dream.demo;import java.util.List;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.data.Stat;/** * 使用异步API获取子节点列表 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, null);    zk.register(new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          if (event.getType() == EventType.None              && event.getPath() == null) {            connectedSignal.countDown();          } else if (event.getType() == EventType.NodeChildrenChanged) {            try {              System.out.println("NodeChildrenChanged.");              List<String> children = zk.getChildren(event.getPath(), true);              System.out.println("Children: " + children);            } catch (KeeperException e) {              e.printStackTrace();            } catch (InterruptedException e) {              e.printStackTrace();            }          }        }      }    });    connectedSignal.await();    zk.create("/zk-huey", "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    zk.create("/zk-huey/node1", "node1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    zk.create("/zk-huey/node2", "node2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    zk.getChildren("/zk-huey",         true,        new AsyncCallback.Children2Callback() {          @Override          public void processResult(int rc, String path, Object ctx,              List<String> children, Stat stat) {            System.out.println("ResultCode: " + rc);            System.out.println("ZNode: " + path);            System.out.println("Context: " + ctx);            System.out.println("Children: " + children);            System.out.println("Stat: " + stat);          }        },        "The Context"    );    zk.create("/zk-huey/node3", "node3".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    Thread.sleep(10 * 1000);    zk.close();  }}

五、获取节点数据内容

1. 使用同步API获取节点数据内容

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;/** * 使用同步API获取节点数据内容 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {    public static void main(String[] args) throws Exception {  final CountDownLatch connectedSignal = new CountDownLatch(1);  final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {          @Override      public void process(WatchedEvent event) {    if (event.getState() == KeeperState.SyncConnected) {        if (event.getType() == EventType.None          && event.getPath() == null) {      connectedSignal.countDown();        }    }      }  });  connectedSignal.await();  zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);  byte[] nodeData = zk.getData("/zk-huey", false, null);  System.out.println("NodeData: " + new String(nodeData));  zk.close();    }}

2. 使用异步API获取节点数据内容

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.data.Stat;/** * 使用异步API获取节点数据内容 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {    public static void main(String[] args) throws Exception {  final CountDownLatch connectedSignal = new CountDownLatch(1);  final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {          @Override      public void process(WatchedEvent event) {    if (event.getState() == KeeperState.SyncConnected) {        if (event.getType() == EventType.None          && event.getPath() == null) {      connectedSignal.countDown();        }    }      }  });  connectedSignal.await();  zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);  zk.getData(    "/zk-huey",     false,     new AsyncCallback.DataCallback() {        @Override        public void processResult(int rc, String path, Object ctx, byte[] data,          Stat stat) {      System.out.println("ResultCode: " + rc);      System.out.println("ZNode: " + path);      System.out.println("Context: " + ctx);      System.out.println("NodeData: " + new String(data));      System.out.println("Stat: " + stat);        }    },    "The Context"  );  zk.close();    }}

六、更新数据

1. 使用同步API更新节点数据内容

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;/** * 使用同步API更新节点数据内容 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {    public static void main(String[] args) throws Exception {  final CountDownLatch connectedSignal = new CountDownLatch(1);  final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {          @Override      public void process(WatchedEvent event) {    if (event.getState() == KeeperState.SyncConnected) {        if (event.getType() == EventType.None          && event.getPath() == null) {      connectedSignal.countDown();        }    }      }  });  connectedSignal.await();  zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);  byte[] nodeData = zk.getData("/zk-huey", false, null);  System.out.println("NodeData: " + nodeData);  zk.setData("/zk-huey", "world".getBytes(), -1);  nodeData = zk.getData("/zk-huey", false, null);  System.out.println("NodeData: " + nodeData);  zk.close();    }}

2. 使用异步API更新节点数据内容

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.data.Stat;/** * 使用异步API更新节点数据内容 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          if (event.getType() == EventType.None              && event.getPath() == null) {            connectedSignal.countDown();          }        }      }    });    connectedSignal.await();    zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    byte[] nodeData = zk.getData("/zk-huey", false, null);    System.out.println("NodeData: " + nodeData);    zk.setData(        "/zk-huey",         "world".getBytes(),         -1,        new AsyncCallback.StatCallback() {          @Override          public void processResult(int rc, String path, Object ctx, Stat stat) {            System.out.println("ResultCode: " + rc);            System.out.println("ZNode: " + path);            System.out.println("Context: " + ctx);            System.out.println("Stat: " + stat);          }        },        "The Context"    );    zk.close();  }}

七、判断节点是否存在

1. 使用同步API判断节点是否存在

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.data.Stat;/** * 使用同步API判断节点是否存在 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          if (event.getType() == EventType.None              && event.getPath() == null) {            connectedSignal.countDown();          }        }      }    });    connectedSignal.await();    Stat stat = zk.exists("/zk-huey", false);    if (stat == null) {      zk.create("/zk-huey", "hello".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);    } else {      System.out.println("Stat: " + stat);    }    zk.close();  }}

2. 使用异步API判断节点是否存在

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.Watcher.Event.KeeperState;import org.apache.zookeeper.data.Stat;/** * 使用异步API判断节点是否存在 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    final CountDownLatch connectedSignal = new CountDownLatch(1);    final ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        if (event.getState() == KeeperState.SyncConnected) {          if (event.getType() == EventType.None              && event.getPath() == null) {            connectedSignal.countDown();          }        }      }    });    connectedSignal.await();    zk.exists(        "/zk-huey",         false,        new AsyncCallback.StatCallback() {          @Override          public void processResult(int rc, String path, Object ctx, Stat stat) {            System.out.println("ResultCode: " + rc);            System.out.println("ZNode: " + path);            System.out.println("Context: " + ctx);            System.out.println("Stat: " + stat);          }        },        "The Context"    );    zk.close();  }}

八、权限控制

package com.huey.dream.demo;import java.util.concurrent.CountDownLatch;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.ZooDefs.Ids;/** * ZooKeeper权限控制 * @author  huey * @version 1.0  * @created 2015-3-1 */public class ZKDemo {  public static void main(String[] args) throws Exception {    /**     * 使用含有权限信息的zookeeper会话创建数据节点     */    final CountDownLatch connectedSignal = new CountDownLatch(1);    ZooKeeper zk = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {      @Override      public void process(WatchedEvent event) {        connectedSignal.countDown();      }    });    connectedSignal.await();    zk.addAuthInfo("digest", "huey:123".getBytes());    zk.create("/zk-huey", "hello".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);    zk.close();    /**     * 使用无权限信息的zookeeper会话访问含有权限信息的数据节点     */    try {      final CountDownLatch signal = new CountDownLatch(1);      ZooKeeper zk1 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {        @Override        public void process(WatchedEvent event) {          signal.countDown();        }      });      signal.await();      zk1.getData("/zk-huey", false, null);      System.out.println("NodeData: " + new String(zk1.getData("/zk-huey", false, null)));      zk1.close();    } catch (Exception e) {      System.out.println("Failed to delete Znode: " + e.getMessage());    }    /**     * 使用错误权限信息的zookeeper会话访问含有权限信息的数据节点     */    try {      final CountDownLatch signal = new CountDownLatch(1);      ZooKeeper zk2 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {        @Override        public void process(WatchedEvent event) {          signal.countDown();        }      });      signal.await();      zk2.addAuthInfo("digest", "huey:abc".getBytes());      System.out.println("NodeData: " + new String(zk2.getData("/zk-huey", false, null)));      zk2.close();    } catch (Exception e) {      System.out.println("Failed to delete Znode: " + e.getMessage());    }    /**     * 使用正确权限信息的zookeeper会话访问含有权限信息的数据节点     */    try {      final CountDownLatch signal = new CountDownLatch(1);      ZooKeeper zk3 = new ZooKeeper("192.168.1.109:2182", 5000, new Watcher() {        @Override        public void process(WatchedEvent event) {          signal.countDown();        }      });      signal.await();      zk3.addAuthInfo("digest", "huey:123".getBytes());      System.out.println("NodeData: " + new String(zk3.getData("/zk-huey", false, null)));      zk3.close();    } catch (Exception e) {      System.out.println("Failed to delete Znode: " + e.getMessage());    }  }}

结果输出:

Failed to delete Znode: KeeperErrorCode = NoAuth for /zk-hueyFailed to delete Znode: KeeperErrorCode = NoAuth for /zk-hueyNodeData: hello
0 0
原创粉丝点击