import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class ZK {
private static String connectString = "bigdata166:2181,bigdata167:2181,bigdata168:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zkClient = null;
/**
* 监听方法,首先运行
*
* @throws IOException
*/
@Before
public void init() throws IOException {
zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
//获取业务
System.out.println(watchedEvent.getType() + "===" + watchedEvent.getPath());
try {
zkClient.getChildren("/", true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
/**
* 参数4:临时,永久,序列化 永久+序列化,临时——+序列化
*
* @throws KeeperException
* @throws InterruptedException
*/
@Test
public void create() throws KeeperException, InterruptedException {
zkClient.create("/bigdata16",
"TestShall".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);//全部开放权限,创建永久权限
}
/**
* 判断节点是否存在
* @throws KeeperException
* @throws InterruptedException
*/
@Test
public void exist() throws KeeperException, InterruptedException {
Stat exists = zkClient.exists("/bigdata16", false);
System.out.println(exists==null? "无此节点":"有此节点");
}
/**
* 获取子节点(坑:当Sting中某台机器关掉Server后,会报错)
* @throws KeeperException
* @throws InterruptedException
*/
@Test
public void getChildren() throws KeeperException, InterruptedException {
List<String> children = zkClient.getChildren("/", true);
for (String child : children) {
System.out.println(child);
}
Thread.sleep(Long.MAX_VALUE);
}
}