zookeeper的java客户端初步使用

来源:互联网 发布:搜狗关键词优化 编辑:程序博客网 时间:2024/06/03 22:40

需要的jar包:

zookeeper-3.4.5\zookeeper-3.4.5.jar
zookeeper-3.4.5\lib\所有jar包


在java客户端对zookeeper进行增删改查操作:

public class SimpleZkClient {private ZooKeeper zkCli = null;@Beforepublic void init() throws Exception {CountDownLatch sampleLatch = new CountDownLatch(1);Watcher sampleWatcher = new ConnectedWatcher (sampleLatch);zkCli = new ZooKeeper("192.168.77.70:2181,192.168.77.80:2181", 2000, sampleWatcher);/* 只有当zkCli链接成功(状态为 SyncConnected)时,此函数调用才结束 */ waitUntilConnected(zkCli, sampleLatch);         /*接下来就可以继续zkCli访问了,避免因为zkCli未连接成功时的访问出错 */}public static void waitUntilConnected(ZooKeeper testZooKeeper, CountDownLatch testLatch) {        if(testZooKeeper.getState() == States.CONNECTING) {            try {                testLatch.await();            } catch (InterruptedException err) {                System.out.println("Latch exception");            }        }    } static class ConnectedWatcher implements Watcher {        private CountDownLatch connectedLatch;        ConnectedWatcher(CountDownLatch connectedLatch) {            this.connectedLatch = connectedLatch;  /* CountDownLatch实例初始化时设为1即可 */        }        /* * zookeeper服务集群监听到某个指定数据节点上发生的事件后,会通知监听注册者(客户端), * 然后客户端就会调用process方法,并将接收到的事件event作为参数传递给process方法 */        @Override        public void process(WatchedEvent event) {            if (event.getState() == KeeperState.SyncConnected) {                connectedLatch.countDown(); /* ZK连接成功时,计数器由1减为0 */            }            System.out.println("节点:" + event.getPath() + " 发生了事件:" + event.getType());        }    } /* * 在zookeeper中创建znode节点 */@Testpublic void testCreateNode() throws UnsupportedEncodingException, KeeperException, InterruptedException {// PERSISTENT 是永久节点String node_PERSISTENT = zkCli.create("/itheima", "伟大".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);// EPHEMERAL 是临时节点,当zkCli.close()之后就删除了。String node_EPHEMERAL = zkCli.create("/itheima/cloud1", "70".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);System.out.println("创建了一个永久节点: " + node_PERSISTENT);System.out.println("创建了一个临时节点: " + node_EPHEMERAL);Thread.sleep(Long.MAX_VALUE);}/* * 获取znode中的数据内容 */@Testpublic void testGetNodeData() throws KeeperException, InterruptedException, UnsupportedEncodingException {byte[] data = zkCli.getData("/itheima", true, null);System.out.println(new String(data, "utf-8"));}/* * 修改znode节点的数据 */@Testpublic void testModifyNodeData() throws UnsupportedEncodingException, KeeperException, InterruptedException {byte[] data = zkCli.getData("/itheima", true, null);System.out.println("修改之前的值: " + new String(data, "utf-8"));// 修改数据时指定的版本号,可以用-1来匹配所有版本zkCli.setData("/itheima", "伟大的培训机构".getBytes("utf-8"), -1);data = zkCli.getData("/itheima", true, null);System.out.println("修改之后的值: " + new String(data, "utf-8"));}/* * 删除znode节点 * 注意 : zk不支持递归删除节点,所以必须先将子节点删除才能删除父节点. */@Testpublic void testDelZnode() throws InterruptedException, KeeperException {Stat exists = zkCli.exists("/itheima", true);System.out.println(exists == null ? ("itheima不存在了") : ("itheima还存在"));List<String> nodes = zkCli.getChildren("/itheima", false);          for (String node : nodes) {          zkCli.delete("/itheima/" + node, -1);          } zkCli.delete("/itheima", -1);Stat exists2 = zkCli.exists("/itheima", true);System.out.println(exists2 == null ? ("itheima不存在了") : ("itheima还存在"));}}

结果:

testCreateNode():


testGetNodeData():


testModifyNodeData():


testDelZnode():



原创粉丝点击