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); } }