Zookeeper的API

目录

ZooKeeper API 简介

JAVA  API简单使用

引入maven坐标

配置Zookeeper对象

常用API操作

监听器的使用


ZooKeeper API 简介

ZooKeeper API 共包含 5 个包,分别为:

org.apache.zookeeper 

org.apache.zookeeper.data 

org.apache.zookeeper.server 

org.apache.zookeeper.server.quorum

org.apache.zookeeper.server.upgrade 

其中 org.apache.zookeeper 包含 ZooKeeper 类,它我们编程时最常用的类文件。

这个类是 ZooKeeper 客户端库的主要类文件。如果要使用 ZooKeeper 服务,应用程序首先必须创建一个Zookeeper 实例,这时就需要使用此类。一旦客户端和 ZooKeeper 服务建立起连接, ZooKeeper 系统将会分配给此连接回话一个 ID 值,并且客户端将会周期地向服务器发送心跳来维持会话的连接。只要连接有效,客户端就可以调用 ZooKeeper API 来做相应的处理。

它提供了所示几类主要方法 , :

功能

描述

create

在本地目录树中创建一个节点

delete

删除一个节点

exists

测试本地是否存在目标节点

get/set data

从目标节点上读取 / 写数据

get/set ACL

获取 / 设置目标节点访问控制列表信息

get children

检索一个子节点上的列表

sync

等待要被传送的数据

JAVA  API简单使用

引入maven坐标

<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
	<type>pom</type>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.1</version>
</dependency>
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

配置Zookeeper对象

// zookeeper的服务器地址,配置conf是用主机名,这里一样
	private String connectString ="zek00:2181,zek01:2181,zek02:2181";
	// 连接超时时间
	private int sessionTimeout = 2000;
	
	private ZooKeeper zk = null;

	/**
	 * 设置zookeeper对象
	 * @throws IOException 
	 */
	@Before
	public void setZookeeper() throws IOException {
		
		zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
			/**
			 * 事件触发的回调方法
			 */
			@Override
			public void process(WatchedEvent event) {
				
			}
		});
		System.out.println("---"+zk);
	}

常用API操作

/**
 * create 方法参数
 *    第一个参数 路径
 *    第二个参数  值  bytes
 *    第三个参数  对节点的访问控制
 *    第四个参数  节点的类型 短暂  永久  序号        
 * @throws KeeperException
 * @throws InterruptedException
 */
@Test
public void create() throws KeeperException, InterruptedException {
	String path = zk.create("/app3", "123".getBytes(), 
			Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
	System.out.println(path);
}
/**
 * 判断节点是否存在
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void exist() throws KeeperException, InterruptedException{
	// 设置为 true 会调用 zk中的监听器
	Stat stat = zk.exists("/app1", true);
	if(stat!=null){
		
		System.out.println("存在。。。。"+stat.getDataLength());
	}else{
		System.out.println("不存在。。。");
	}
}
/**
 * 获取子节点
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getChilren() throws KeeperException, InterruptedException{
	List<String> list = zk.getChildren("/", true);
	for (String s : list) {
		System.out.println(s);
	}
}

/**
 * 获取节点的内容
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getData() throws KeeperException, InterruptedException{
	
	byte[] b = zk.getData("/app1", false, null );
	System.out.println(new String(b));
}

/**
 * 修改节点内容
 * 	  version -1 自动维护
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void setData() throws KeeperException, InterruptedException{
	Stat s = zk.setData("/app1", "test".getBytes(), -1);
}
/**
 * 删除节点
 *    非空节点删除不掉
 * @throws InterruptedException
 * @throws KeeperException
 */
@Test
public void deleteNode() throws InterruptedException, KeeperException{
	zk.delete("/app1", -1);
}

监听器的使用

@Before
public static void setUpBeforeClass() throws Exception {
	zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
		/**
		 * 监听器
		 */
		@Override
		public void process(WatchedEvent event) {
			System.out.println("事件触发...");
		}
	});
}


/**
 * 获取子节点
 * getChildren(path,watch?)监听的事件是:节点下的子节点增减变化事件
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getChilren() throws KeeperException, InterruptedException{
	List<String> list = zk.getChildren("/", new Watcher() {
		
		@Override
		public void process(WatchedEvent event) {
			// TODO Auto-generated method stub
			System.out.println("监控节点下的子节点被改变..."+event.getPath());
		}
	});
	for (String s : list) {
		System.out.println(s);
	}
	Thread.sleep(Long.MAX_VALUE);
}

/**
 * 获取节点的内容
 * getData(path,watch?)监听的事件是:节点数据变化事件
 * @throws InterruptedException 
 * @throws KeeperException 
 */
@Test
public void getData() throws KeeperException, InterruptedException{
	
	byte[] b = zk.getData("/app1", new Watcher() {
		
		@Override
		public void process(WatchedEvent event) {
			System.out.println("--数据改变了--");
			
		}
	}, null );
	System.out.println(new String(b));
	Thread.sleep(Long.MAX_VALUE);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值