Zookeeper学习笔记2-------group创建、查询、删除

来源:互联网 发布:网络层的4个功能 编辑:程序博客网 时间:2024/05/16 00:28

下面一段代码涉及到了 ZooKeeper 创建group、为group添加member、列出group下面的 member、递归删除group。  

这里我引用的是 ZooKeeper 3.4.10 提供的jar包。


GroupHelper.java

import java.io.IOException;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.Watcher.Event.KeeperState;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;public class GroupHelper implements Watcher {private static final int SESSION_TIMEOUT = 5000;private ZooKeeper zk;private CountDownLatch connectSignal = new CountDownLatch(1);private String groupName=null;/** * connect to zookeeper * @param host * @throws IOException * @throws InterruptedException */public void connect(String host) throws IOException, InterruptedException {this.zk = new ZooKeeper(host, SESSION_TIMEOUT, this);connectSignal.await();}@Overridepublic void process(WatchedEvent event) {// TODO Auto-generated method stubif (event.getState() == KeeperState.SyncConnected) {connectSignal.countDown();}}/** *  * @param groupName * @throws KeeperException * @throws InterruptedException */public void create(String groupName) throws KeeperException, InterruptedException {this.groupName=groupName;String path="/".concat(groupName) ;String createPath=zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.out.println("Create Path:"+createPath);}/** * @param memberName * @throws KeeperException * @throws InterruptedException */public void joinMember(String memberName) throws KeeperException, InterruptedException { String path=String.format("/%s/%s", this.groupName,memberName);   path=zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);   System.out.println("Path:"+path);} /** *  * @param groupName * @throws InterruptedException  * @throws KeeperException  */public void listMember(String groupName) throws  InterruptedException {  List<String> children;try {children = zk.getChildren(groupName, false);if(children.isEmpty()) {System.out.println("No Member in List......");System.exit(-1);}for(String child :children) { System.out.println(child);}} catch (KeeperException e) {// TODO Auto-generated catch blocke.printStackTrace();System.exit(-1);}}/** *  * @param path * @throws KeeperException * @throws InterruptedException */public void deleteMember(String path) throws KeeperException, InterruptedException {List<String> children = zk.getChildren(path, false);if(children.isEmpty()) {return ;}for(String child:children) {String tmpPath=path+"/"+child;List<String> tmpList=zk.getChildren(tmpPath, false);if(tmpList.isEmpty()) {zk.delete(tmpPath, -1);}else {this.deleteMember(tmpPath);}}zk.delete(path, -1);}}

GroupTest.java  

我们创建一个组a ,然后又在组a下面创建c、ds、b成员,然后又在/a/ds下创建ss成员 ,最后递归删除他。

import java.io.IOException;import org.apache.log4j.BasicConfigurator;import org.apache.zookeeper.KeeperException;public class ZookeeperTest { static { BasicConfigurator.configure(); }  public static void main(String []argv) throws IOException, InterruptedException, KeeperException {  GroupHelper cg=new GroupHelper();    cg.connect("127.0.0.1:2181");     cg.create("a");    cg.joinMember("b");  cg.joinMember("c");  cg.joinMember("ds");  cg.joinMember("ds/ss");  cg.listMember("/a");  //递归删除  cg.deleteMember("/a");  }}

运行结果:


对 Zookeeper的组操作是非常简单的。


原创粉丝点击