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 ...
随机推荐
- Go语言核心36讲(Go语言进阶技术十三)--学习笔记
19 | 错误处理(上) 提到 Go 语言中的错误处理,我们其实已经在前面接触过几次了. 比如,我们声明过error类型的变量err,也调用过errors包中的New函数. 我们说过error类型其实 ...
- shell 脚本二进制安装mysql
以下脚本的手动安装连接:https://www.cnblogs.com/leihongnu/p/12581793.html [ #/bin/bash#脚本安装 mysql,上传安装包至 /rootcd ...
- Jetbrains 系 IDE 编辑器的代码提示功能
著名的 Jetbrains 可谓编程界的一大福音,众多有名代码编辑器比如 ItelliJ IDEA.PHPStorm.WebStorm.PyCharm 等,均出自这家公司麾下. 对于中国的Java开发 ...
- SSH 提示密码过期,如何通过 ansible 批量更新线上服务器密码
起因 线上环境是在内网,登陆线上环境需要使用 VPN + 堡垒机 登陆,但是我日常登陆线上环境都是 VPN + 堡垒机 + Socks5常驻代理,在shell端只需要保存会话,会话使用socks5代理 ...
- laravel groupby 报错
报错信息 laravel which is not functionally dependent on columns in GROUP BY clause; this is incompatible ...
- Python使用ConfigParser模块读取配置文件(config.ini)以及写入配置文件
前言 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser.configPars ...
- Navicat for MySQL 批量执行多个 SQL 文件
文件合并 type *.sql >> aaa.sql 执行sql文件 右键点击数据库
- 带你理解MST性质
写在前面 最小生成树的引出 假设要在n个城市之间建立通信联络网,则连通n个城市需要n-1条线路.在这种情况下,我们自然需要考虑一个问题,如何在最节省经费的条件下建立这个网络? 很自然地我们会想到,将各 ...
- 图文详解 Java 字节码,让你秒懂全过程
原文地址:https://blog.csdn.net/AliceSmith1/article/details/80051153 即便对那些有经验的Java开发人员来说,阅读已编译的Java字节码也很乏 ...
- requests的post请求基本使用
import requests # 请求url url = 'https://fanyi.baidu.com/sug' # 请求头 headers = { 'User-Agent': 'Mozilla ...