Zookeeper API JAVA 解析

常用方法:

  • new ZooKeeper()构造方法
  • create
  • exists
  • getChildren
  • getData
注意点:
watcher 的触发,为一次性。

什么情况下会触发watcher
  • exists方法: 设置watcher时,如果对应服务端已经不存在node时,watcher是不会留在服务端,下次不会被触发。针对这种情况需要判断返回的stat == null来进行处理
  • getChildren方法: 和exist一样,需要处理节点不存在时watcher不会被记录。 还有一个点,当前的父node发生delete变化时,也可以得到触发
  • getData方法: 和exist一样,需要处理节点不存在时watcher不会被记录


测试程序
package zookeeper;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class ZookeeperTest {

	public static final int Zookeeper_SESSION_TIMEOUT = 20000;

	static ZooKeeper zk;

	static class TestWatcher implements Watcher {

		@Override
		public void process(WatchedEvent event) {
			// TODO Auto-generated method stub
			System.out.println("come from TestWatcher-> process");
		}

	}

	static TestWatcher watcher = new TestWatcher();

	/**
	 * new ZooKeeper
	 * 初始化 ZooKeeper 实例
	 */
	public static void createZKInstance() throws IOException, KeeperException,
			InterruptedException {
		zk = new ZooKeeper("ip:port,ip:port", Zookeeper_SESSION_TIMEOUT,watcher);
	}
	
	/**
	 * create
	 * 创建节点
	 */
	public static void createNode(String node) throws IOException, InterruptedException,KeeperException
	 {
	  if (zk.exists(node, null) == null) {
	   zk.create(node,node.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
	  }
	 }
	
	/**
	 * exists
	 * 判断节点是否存在
	 */
	public  static boolean isExists(String node) throws InterruptedException,
	   KeeperException {
	  if (zk.exists(node, null) == null) {
	   return false;
	  }
	  return true;
	 }
	
	/**
	 * getChildren
	 * 获取一个节点的子节点列表
	 */
	public static List<String> getChildren(String node) throws KeeperException, InterruptedException{
		return zk.getChildren(node, null);
	}
	
	/**
	 * 返回节点的数据
	 */
	public static byte[] getDate(String path ) throws KeeperException, InterruptedException{
		return zk.getData(path, null, null);
	}
	
	public static void main(String[] args) {
		try {
			createZKInstance();
			
			createNode("/testnodes");
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (KeeperException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值