Zookeeper学习笔记2-------group创建、查询、删除

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 下面一段代码涉及到了 ZooKeeper 创建group、为group添加member、列出group下面的 member、递归删除group。  这里我引用的是 ZooKeeper 3.4.10 提供的jar包。

下面一段代码涉及到了 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();
	}

	@Override
	public void process(WatchedEvent event) {
		// TODO Auto-generated method stub
		if (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 block
			e.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的组操作是非常简单的。


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
监控 Dubbo 网络协议
【SpringBoot学习笔记 十四】SpringBoot+Dubbo+Zookeeper集成开发(下)
【SpringBoot学习笔记 十四】SpringBoot+Dubbo+Zookeeper集成开发(下)
189 0
|
消息中间件 监控 Dubbo
【SpringBoot学习笔记 十四】SpringBoot+Dubbo+Zookeeper集成开发
【SpringBoot学习笔记 十四】SpringBoot+Dubbo+Zookeeper集成开发
217 0
|
存储 负载均衡 Java
|
缓存 监控 网络协议
MSE 风险分布管理功能发布(二)| 学习笔记
快速学习 MSE 风险分布管理功能发布。
MSE 风险分布管理功能发布(二)| 学习笔记
|
Java Linux API
|
API 数据安全/隐私保护
|
数据可视化 Dubbo Java
MSE 微服务测试---自动化回归最佳实践|学习笔记
快速学习 MSE 微服务测试---自动化回归最佳实践
MSE 微服务测试---自动化回归最佳实践|学习笔记
|
敏捷开发 弹性计算 Kubernetes
MSE 开发环境隔离功能介绍|学习笔记(二)
快速学习 MSE 开发环境隔离功能介绍
MSE 开发环境隔离功能介绍|学习笔记(二)
|
弹性计算 Kubernetes 安全
MSE 开发环境隔离功能介绍|学习笔记(一)
快速学习 MSE 开发环境隔离功能介绍
MSE 开发环境隔离功能介绍|学习笔记(一)
|
缓存 弹性计算 安全
MSE Nacos 配置安全最佳实践|学习笔记(二)
快速学习 MSE Nacos 配置安全最佳实践
MSE Nacos 配置安全最佳实践|学习笔记(二)
下一篇
DataWorks