Java集成zookeeper笔记

一、引入zookeeper-3.4.5.jar(原生zk包)、slf4j.jar即可,其他还有zkClient和Curator,其中Curator封装的zk客户端组件最好用。

二、手写ZookeeperBase.java

sao废话,上代码:
简单的创建连接和增删改查操作:

public class ZookeeperBase{

	//zk集群地址(端口号为客户端端口号)
	private static final String CONNECT_ADDR = "192.168.241.127:2181,192.168.241.128:2181,192.168.241.129:2181";
	
	//session 超时时间,单位毫秒
	private static final int SESSION_OUTTIME = 5000;
	
	//用于阻塞程序执行,直到zk成功连接后再发送继续执行信号,因为zk建立连接是异步的,阻塞是防止程序在zk成功连接前被调用。
	private static final CountDownLatch contectedSemaphore = new CountDownLatch (1);
	
	public static void main(String[] args)throws Exception{

		Zookeeper zk = new Zookeeper(CONNECT_ADDR,SESSION_OUTTIME,new Watcher()){
			@override
			public void process(WatcherEvent event){  //WatcherEvent为观察者监听事件
			
				//获取事件状态(与客户端连接状态相关)
				/*
				* KeeperState:Disconneced        连接失败 		 
				* KeeperState:SyncConnected	 连接成功	 		 
				* KeeperState:AuthFailed         认证失败		 
				* KeeperState:Expired            会话过期
				*/
				KeeperState keeperState = event.getState();
				
				//获取事件类型(与zknode相关)
				/*
				* EventType:NodeCreated            节点创建		 
				* EventType:NodeDataChanged        节点的数据变更		 
				* EventType:NodeChildrentChanged   子节点下的数据变更		 
				* EventType:NodeDeleted            节点删除
				* EventType:None                   刚连接什么都没做
				*/
				EventType eventType  = event.getType();
				
				//成功建立连接(固定写法)
				if(KeeperState.SyncConnected == keeperState){

					if(EventType.None == eventType){

						//发送信号让程序继续执行
						contectedSemaphore.countDown();

					}

				}
				
			}
			
			//阻塞程序执行
			contectedSemaphore.await();

			//创建节点
			//同步创建
			String newNode = zk.create("/testRoot","data".getBytes(),ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
			/*
			*参数1:节点路径:/testRoot,原生api不允许递归创建节点,即没有父节点不允许直接连带父子节点一起创建。创建节点是要写全路径,例如:/testRoot/children。
			*参数2:节点内容:内容类型为字节数组,不支持存储序列化对象,例如不支持将java对象序列化为json存储,但可以使用java序列化框架,如hession或kyso。
			*参数3:权限控制:在对权限要求不严格情况下都使用OPEN_ACL_UNSAFE开放权限即可。
			*参数4:节点类型:提供了四种类型。
			*PERSISTENT 持久化节点
			*PERSISTENT SEQUENTIAL 持久顺序节点
			*EPHEMERAL 临时节点
			*EPHEMERAL SEQUENTIAL 临时顺序节点
			*/

		};	

	} 
	
}

猜你喜欢

转载自blog.csdn.net/weixin_38473754/article/details/83010590