zookeeper是我们在开发中经常使用的一个分布式协调组件。功能很强大。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
zookeeper的javaAPI的使用
创建一个maven的普通java工程
导入依赖 (如果显示log4j下面的什么logger文件找不到 ,什么类找不到,但是log4j的jar包又有 ,那就把zookeeper的版本换一个)
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</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>
</dependencies>
直接写个测试类(api的简单用法)
package com.liy.test;
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;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;
public class Test1 {
private static String connectString = "192.168.72.114:2181,192.168.72.115:2181,192.168.72.116:2181";
private static int sessionTimeout = 30000;
private static ZooKeeper zk = null;
@Before
public void test() throws Exception {
zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent arg0) {
System.out.println("监听到了.....");
}
});
System.out.println(zk.toString());
}
/**
* create 方法参数
* 第一个参数 路径
* 第二个参数 值 bytes
* 第三个参数 对节点的访问控制
* 第四个参数 节点的类型 短暂 永久 序号
* @throws KeeperException
* @throws InterruptedException
*/
@Test
public void create() throws Exception{
String path = zk.create("/app6", "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);
}
}