Zookeeper之创建组,加入组,列出组成员和删除组
来源:互联网 发布:lte网络接口协议 编辑:程序博客网 时间:2024/06/05 01:09
创建组znode
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 IOException, InterruptedException { //参数this表示一个Watcher对象接收来自于Zookeeper的回调,以获得各种事件的通知,在此表示CreateGroup对象 zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this); connectedSignal.await(); } @Override public void process(WatchedEvent event) { // Watcher interface if (event.getState() == KeeperState.SyncConnected) { //在调用这个方法表示计数器递减1,若计数器的值变为0,则await()方法返回 connectedSignal.countDown(); } } public void create(String groupName) throws KeeperException, InterruptedException { String path = "/" + groupName; String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// 持久化的 znode System.out.println("Created " + createdPath); } public void close() throws InterruptedException { zk.close(); } public static void main(String[] args) throws Exception { CreateGroup createGroup = new CreateGroup(); createGroup.connect("192.168.8.88"); createGroup.create("zoo"); createGroup.close(); }}
加入组成员-子znode
// vv ConnectionWatcherpublic class ConnectionWatcher implements Watcher { private static final int SESSION_TIMEOUT = 5000; protected ZooKeeper zk; private CountDownLatch connectedSignal = new CountDownLatch(1); public void connect(String hosts) throws IOException, InterruptedException { zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this); connectedSignal.await(); } @Override public void process(WatchedEvent event) { if (event.getState() == KeeperState.SyncConnected) { connectedSignal.countDown(); } } public void close() throws InterruptedException { zk.close(); }}// ^^ ConnectionWatcher// vv JoinGrouppublic class JoinGroup extends ConnectionWatcher { public void join(String groupName, String memberName) throws KeeperException, InterruptedException { String path = "/" + groupName + "/" + memberName; String createdPath = zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); System.out.println("Created " + createdPath); } public static void main(String[] args) throws Exception { JoinGroup joinGroup = new JoinGroup(); joinGroup.connect("192.168.8.88"); joinGroup.join("zoo", "goat"); // stay alive until process is killed or thread is interrupted Thread.sleep(Long.MAX_VALUE); }}// ^^ JoinGroup
列出组成员
// vv ListGrouppublic class ListGroup extends ConnectionWatcher { public void list(String groupName) throws KeeperException, InterruptedException { String path = "/" + groupName; try { //第二个参数若为true表示对这个父节点设置监视,应用程序可以接收组成员的加入,退出和这个父组znode被删除的有关通知 List<String> children = zk.getChildren(path, false); if (children.isEmpty()) { System.out.printf("No members in group %s\n", groupName); System.exit(1); } for (String child : children) { System.out.println(child); } } catch (KeeperException.NoNodeException e) { System.out.printf("Group %s does not exist\n", groupName); System.exit(1); } } public static void main(String[] args) throws Exception { ListGroup listGroup = new ListGroup(); listGroup.connect("192.168.8.88"); listGroup.list("zoo"); listGroup.close(); }}// ^^ ListGroup
删除组
// vv DeleteGrouppublic class DeleteGroup extends ConnectionWatcher { public void delete(String groupName) throws KeeperException, InterruptedException { String path = "/" + groupName; try { List<String> children = zk.getChildren(path, false); for (String child : children) { zk.delete(path + "/" + child, -1);//-1表示绕过版本检测机制,不管znode版本是什么直接将其删除 } zk.delete(path, -1); } catch (KeeperException.NoNodeException e) { System.out.printf("Group %s does not exist\n", groupName); System.exit(1); } } public static void main(String[] args) throws Exception { DeleteGroup deleteGroup = new DeleteGroup(); deleteGroup.connect("192.168.8.88"); deleteGroup.delete("zoo"); deleteGroup.close(); }}// ^^ DeleteGroup
0 0
- Zookeeper之创建组,加入组,列出组成员和删除组
- 举例说明如何创建和管理用户及组(添加删除用户,组成员的添加删除)
- 增加重做日志组大小和增加日志组成员
- oracle在线添加日志组和日志组成员
- 增加redolog组和组成员及ORA-01624错误的处理
- RAC删除添加redolog日志组成员
- Power shell操作AD服务器实现ou下的组成员迁移到别的ou组
- 项目组成员相处之道
- 项目组成员组成
- 如何删除日志组成员( DROP LOGFILE MEMBER )
- Oracle redo log 大小及组数的设置(在线修改日志组数目及组成员个数)
- Oracle redo log 大小及组数的设置(在线修改日志组数目及组成员个数)
- 查询出Exchange Server的通讯组,并将通讯组成员输出到本地的文本文件中!
- Linux 创建修改删除用户和组
- db2创建实例、删除实例、列出实例
- Oracle学习(六)之增加日志组成员
- 如何刺激和调动项目组成员的积极性
- 分布式服务协调员zookeeper - 应用场景和监控
- 百练之Highway解题报告
- OC中继承和复合
- iOS开发概述 - 17.UIView动画和核心动画对比
- 未使用调试信息生成二进制文件
- 【python3】相关资料库
- Zookeeper之创建组,加入组,列出组成员和删除组
- c语言中的函数
- 【Java多线程】之十四:Java FutureTask Example Program
- oracle:ora-12560:tns:协议适配器错误
- 【HDU2196】【Computer】
- NYOJ 1230 聪明的班主任
- 知识图谱,为移动搜索而生
- Java基础学习总结---------异常Exception(2)
- c#中xml序列化 和binary 序列化