下面一段代码涉及到了 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的组操作是非常简单的。

Zookeeper学习笔记2-------group创建、查询、删除相关推荐

  1. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  2. Zookeeper学习笔记

    Zookeeper学习笔记 概念 Zookeeper工作机制 特点 数据结构 应用场景 统一命名服务 统一配置管理 统一集群管理 软负载均衡 Zookeeper本地安装 本地模式安装 安装前准备 配置 ...

  3. 学习笔记--存储过程的创建和调用

    学习笔记–存储过程的创建和调用 定义 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次.如果某次操作需要执行多次SQL,使用存储过程比单纯SQL ...

  4. JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  5. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  6. oracle 最大值及其_学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例...

    天萃荷净 select max(id),min(id) from table优化,分享开发DBA需求,在SQL语句查询最大值.最小值数据时的优化方式案例 1.查看数据库版本 SQL> selec ...

  7. Linux学习笔记---使用BusyBox创建根文件系统(二)

    目录 向 rootfs 的"/lib "目录添加库文件 向 rootfs 的usr/lib 目录添加库文件 创建其他文件夹 根文件系统初步测试 向 rootfs 的"/l ...

  8. mybatis学习笔记(12)-多对多查询

    mybatis学习笔记12-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通 ...

  9. IBatis.Net学习笔记六--再谈查询

    在IBatis.Net学习笔记五--常用的查询方式 中我提到了一些IBatis.Net中的查询,特别是配置文件的写法. 后来通过大家的讨论,特别是Anders Cui 的提醒,又发现了其他的多表查询的 ...

  10. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

最新文章

  1. 字节二面:GET 请求能上传图片吗?我蒙了。。
  2. 【转】你必须了解的Session的本质
  3. C语言有以下几种取整方法:
  4. 智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案
  5. 链表操作时头结点的好处
  6. 特斯拉宣布总部将从加州硅谷迁到得州
  7. c++ primer练习题 第七章 类 (Class)
  8. JS+XMLDOM+XSL:实现中英文界面切换、排序、分页显示、增删改查XML文件数据源
  9. python 公开课_【python公开课|学好python前,必须掌握这篇Python for 循环语句,还不会就快来看看】- 环球网校...
  10. IEEE1588v2解析(2)--PTP协议概述
  11. 无论产品经理是否逃离北上广,过硬的产品实力才能让自己始终拥有竞争力
  12. 修改程序版本工具(ResHacker)使用说明20140902
  13. 【电脑运用及修理】固态硬盘跟机械硬盘有什么区别?
  14. Python项目实战:绕圈圈面试题
  15. html空格的使用 emsp ensp nbsp; thinsp; zwnj;  zwj;
  16. 超详细的单摄→双摄→三摄→3D成像摄像头产业链
  17. 《论语》原文及其全文翻译 学而篇12
  18. C#编程_网卡信息检测与网络流量检测
  19. macos安装joy工具
  20. 将两个已排好序数组合并成一个排好序数组

热门文章

  1. html 标题设置链接 博客,从今天开始,拿起VuePress打造属于自己的专属博客
  2. vue中全局定义mintUI中toast
  3. 大数据的python基础_大数据量化之路之python基础
  4. oracle 实用记录
  5. 有了这家公司,谁还去餐馆吃饭
  6. RabbitMQ-Plugin configuration unchanged
  7. 深入浅出Stream和parallelStream
  8. reg query报错系统找不到指定的注册表项或值。
  9. 透过招股书看知乎的价值投资逻辑
  10. 【Android】【TP】TP开发常见问题分析