public class CreateGroup implements Watcher {
private static final int SESSION_TIMEOUT=5000;
//ZooKeeper类是客户端API的主要类,用于维护客户端和ZooKeeper服务之间的连接
private ZooKeeper zk;
//锁存器(latch)此计数器为1,表示在释放所有等待线程之前需要发生的事件数,
private CountDownLatch connectedSignal= new CountDownLatch(1); public void connect(String hosts) throws InterruptedException, IOException {
//参数this表示一个Watcher对象接收来自于Zookeeper的回调,以获得各种事件的通知,在此表示CreateGroup对象
zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
connectedSignal.await();
} public void process(WatchedEvent watchedEvent) { // Watcher interface
if (watchedEvent.getState()==Event.KeeperState.SyncConnected){
//在调用这个方法表示计数器递减1,若计数器的值变为0,则await()方法返回
connectedSignal.countDown();
}
} //创建组
public void create(String groupName) throws KeeperException, InterruptedException {
String path="/"+groupName;
String createPath = zk.create(path, null/*data*/, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 持久化的 znode
System.out.println("Created "+createPath);
} //加入组
public void join(String groupName,String memberName) throws KeeperException, InterruptedException {
String path = "/" + groupName + "/" + memberName;
String createPath = zk.create(path, null/*data*/, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 持久化的 znode
System.out.println("Created "+createPath);
} //列出组成员
public void ListGroup(String groupName){
String path="/"+groupName;
try {
List<String> children = zk.getChildren(path, false);
if (children.isEmpty()){
System.out.println(String.format("No members in group %s",groupName));
System.exit(1);
}
for (String child:children){
System.out.println(child);
}
} catch (KeeperException.NoNodeException e) {
System.out.println(String.format("Group %s does not exist\n",groupName));
System.exit(1);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
//删除组成员
public void deleteGroup(String groupName){
String path="/"+groupName;
try {
List<String> children = zk.getChildren(path, false);
for (String child:children){
//节点路径和版本号 将版本号设置为-1 可以绕过版本检测机制
zk.delete(path+"/"+child,-1);
}
zk.delete(path,-1);
} catch (KeeperException.NoNodeException e) {
System.out.println(String.format("Group %s does not exist\n",groupName));
System.exit(1);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
} public void close() throws InterruptedException {
zk.close();
} public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
CreateGroup createGroup = new CreateGroup();
createGroup.connect("192.168.1.132:2181");
//createGroup.join("a","b");
//createGroup.ListGroup("a");
createGroup.deleteGroup("a");
createGroup.close();
}
}

Zookeeper之创建组,加入组,列出组成员和删除组的更多相关文章

  1. 添加组groupadd,修改组groupmod,删除组groupdel,将用户加入删除组gpasswd

    groupadd -g GID :指定组id groupmod -g GID :修改组id -n 新组名 :修改组名 groupmod -n newname oldname groupdel grou ...

  2. SQLSERVER将一个文件组的数据移动到另一个文件组

    SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...

  3. Linux - 有效群组(effective group)与初始群组(initial group),groups,newgrp

    每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID ,那个 GID 就是所谓的『初始群组 (initial group) 』!也就是说,当用户一登陆系统,立刻就拥有这个群组的相关权 ...

  4. MySQL高可用之组复制技术(2):配置单主模型的组复制

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  5. Linux基础命令---添加组groupadd、删除组groupdel

    groupadd 指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...

  6. 35-Ubuntu-组管理-01-添加组/删除组/确认组信息

    组管理 提示: 创建组/删除组的终端命令都需要sudo执行,标准用户没有权限! 序号 命令 作用 01 sudo groupadd 组名 添加组 02 sudo groupdel 组名 删除组 03 ...

  7. [转载]ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:

    原文地址:1)的成员_ORA-00312:">ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:作者:Sweet_薇薇毅 今天用系统清理工具把系统垃圾清理了一 ...

  8. CAD删除组(网页版)

    主要用到函数说明: _DMxDrawX::DeleteGroup 根据组名,删除组.详细说明如下: 参数 说明 BSTR pszName 组名 js代码实现如下: 1 2 3 4 5 6 7 8 9 ...

  9. 查找担保圈-step5-比较各组之间的成员,对组的包含性进行查询,具体见程序的注释-版本2

    USE [test] GO /****** Object: StoredProcedure [dbo].[p03_get_groupno_e2] Script Date: 2019/7/8 15:01 ...

随机推荐

  1. Go语言核心36讲(Go语言进阶技术十三)--学习笔记

    19 | 错误处理(上) 提到 Go 语言中的错误处理,我们其实已经在前面接触过几次了. 比如,我们声明过error类型的变量err,也调用过errors包中的New函数. 我们说过error类型其实 ...

  2. shell 脚本二进制安装mysql

    以下脚本的手动安装连接:https://www.cnblogs.com/leihongnu/p/12581793.html [ #/bin/bash#脚本安装 mysql,上传安装包至 /rootcd ...

  3. Jetbrains 系 IDE 编辑器的代码提示功能

    著名的 Jetbrains 可谓编程界的一大福音,众多有名代码编辑器比如 ItelliJ IDEA.PHPStorm.WebStorm.PyCharm 等,均出自这家公司麾下. 对于中国的Java开发 ...

  4. SSH 提示密码过期,如何通过 ansible 批量更新线上服务器密码

    起因 线上环境是在内网,登陆线上环境需要使用 VPN + 堡垒机 登陆,但是我日常登陆线上环境都是 VPN + 堡垒机 + Socks5常驻代理,在shell端只需要保存会话,会话使用socks5代理 ...

  5. laravel groupby 报错

    报错信息 laravel which is not functionally dependent on columns in GROUP BY clause; this is incompatible ...

  6. Python使用ConfigParser模块读取配置文件(config.ini)以及写入配置文件

    前言 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser.configPars ...

  7. Navicat for MySQL 批量执行多个 SQL 文件

    文件合并 type *.sql >> aaa.sql 执行sql文件 右键点击数据库

  8. 带你理解MST性质

    写在前面 最小生成树的引出 假设要在n个城市之间建立通信联络网,则连通n个城市需要n-1条线路.在这种情况下,我们自然需要考虑一个问题,如何在最节省经费的条件下建立这个网络? 很自然地我们会想到,将各 ...

  9. 图文详解 Java 字节码,让你秒懂全过程

    原文地址:https://blog.csdn.net/AliceSmith1/article/details/80051153 即便对那些有经验的Java开发人员来说,阅读已编译的Java字节码也很乏 ...

  10. requests的post请求基本使用

    import requests # 请求url url = 'https://fanyi.baidu.com/sug' # 请求头 headers = { 'User-Agent': 'Mozilla ...