Zookeeper之创建组,加入组,列出组成员和删除组
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之创建组,加入组,列出组成员和删除组的更多相关文章
- 添加组groupadd,修改组groupmod,删除组groupdel,将用户加入删除组gpasswd
groupadd -g GID :指定组id groupmod -g GID :修改组id -n 新组名 :修改组名 groupmod -n newname oldname groupdel grou ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- Linux - 有效群组(effective group)与初始群组(initial group),groups,newgrp
每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID ,那个 GID 就是所谓的『初始群组 (initial group) 』!也就是说,当用户一登陆系统,立刻就拥有这个群组的相关权 ...
- MySQL高可用之组复制技术(2):配置单主模型的组复制
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...
- Linux基础命令---添加组groupadd、删除组groupdel
groupadd 指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...
- 35-Ubuntu-组管理-01-添加组/删除组/确认组信息
组管理 提示: 创建组/删除组的终端命令都需要sudo执行,标准用户没有权限! 序号 命令 作用 01 sudo groupadd 组名 添加组 02 sudo groupdel 组名 删除组 03 ...
- [转载]ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:
原文地址:1)的成员_ORA-00312:">ORA-00313:无法打开日志组1(线程 1)的成员_ORA-00312:作者:Sweet_薇薇毅 今天用系统清理工具把系统垃圾清理了一 ...
- CAD删除组(网页版)
主要用到函数说明: _DMxDrawX::DeleteGroup 根据组名,删除组.详细说明如下: 参数 说明 BSTR pszName 组名 js代码实现如下: 1 2 3 4 5 6 7 8 9 ...
- 查找担保圈-step5-比较各组之间的成员,对组的包含性进行查询,具体见程序的注释-版本2
USE [test] GO /****** Object: StoredProcedure [dbo].[p03_get_groupno_e2] Script Date: 2019/7/8 15:01 ...
随机推荐
- 矩形覆盖 牛客网 剑指Offer
矩形覆盖 牛客网 剑指Offer 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution: ...
- 【动图解释】关系数据库de关系代数小记
本文章在 Github 撰写,同时在 我的博客 进行了发布. 最近学数据库概论学到了关系数据库的关系代数了.哎嘛,真的把我整晕了,尤其是关系代数的使用,很容易让人被蒙在鼓里. 对我来说槽点最大的莫过于 ...
- 2021 ICPC 江西省赛总结
比赛链接:https://ac.nowcoder.com/acm/contest/21592 大三的第一场正式赛,之前的几次网络赛和选拔赛都有雄哥坐镇,所以并没有觉得很慌毕竟校排只取每个学校成 ...
- 完美解决Github网页打开超慢的问题
由于某些原因,国内访问Github会异常缓慢,在clone仓库时甚至只有10k以下的速度,下载半天有时还会失败需要从头再来,甚是让人恼火.本文介绍通过修改系统hosts文件的办法,绕过国内dns解析, ...
- S2-001漏洞分析
前言 开始好好学Java,跟着师傅们的文章走一遍 Strust简介 Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写 ...
- Java学习(十)
今天学习的是参数的传入,感觉这个和c++差不多. 传一个参数进去,要看这个参数是地址还是一个值,如果是值的话那无论在方法中如何加减,也只是另一个局部变量的事情了,与该参数无关,在原方法中参数的值保持不 ...
- R数据分析:如何给结构方程画路径图,tidySEM包详解
之前一直是用semPlot这个包给来进行结构方程模型的路径绘制,自从用了tidySEM这个包后就发现之前那个包不香了,今天就给大家分享一下tidySEM. 这个包的很大特点就是所有的画图原始都是存在数 ...
- 【从头到脚品读 Linux 0.11 源码】第一回 最开始的两行代码
从这一篇开始,您就将跟着我一起进入这操作系统的梦幻之旅! 别担心,每一章的内容会非常的少,而且你也不要抱着很大的负担去学习,只需要像读小说一样,跟着我一章一章读下去就好. 话不多说,直奔主题.当你按下 ...
- 重写(Override)与重载(Overload)区别
重写是子类对父类的允许访问的方法的实现过程进行重新编写. 方法重写三要素: (1)方法名形参列表相同: (2)返回值类型和声明异常类型子类小于父类: (3)访问权限,子类大于等于父类. 重写的好处在于 ...
- PAT A1103—DFS
Integer Factorization The K−P factorization of a positive integer N is to write N as the sum of the ...