原生API 增删改查询

public class ZkBaseTest {
static final String CONNECT_ADDR = "192.168.0.120";
static final CountDownLatch countDownLatch = new CountDownLatch(1); public static void main(String[] args) throws Exception { // 获取zookeeper对象
ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, 20000, new Watcher() { @Override
public void process(WatchedEvent event) {
KeeperState state = event.getState();
EventType type = event.getType();
if (KeeperState.SyncConnected == state) {
if (EventType.None == type) { countDownLatch.countDown();
}
} } });
countDownLatch.await(); // 一直阻塞直到链接成功 zk.create("/test", "testdata".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); byte[] data = zk.getData("/test", false, null);
System.out.println("data " + new String(data)); zk.setData("/test", "newdata".getBytes(), -1);
byte[] afterData = zk.getData("/test", false, null);
System.out.println("afterData " + new String(afterData)); zk.delete("/test", -1); //删除过程中,需要版本检查 -1表示跳过版本检查
zk.close();
} }

  

注意:节点类型分为四种 临时,临时顺序 持久 持久顺序

临时节点的有效期 是当次连接开始到当次连接结束。

实际开发中,我们一般不会使用原生APi去开发,超级不好用。一般会使用

Curator或者zkclient 后面都会介绍到

Watcher 

之前提到,监控机制是zookeeper的一个核心特性。是一次性触发的。

当watch监控的数据或者节点发生变化,会通知设置了该监控的client,

即watcher。Zookeeper的watch是一次性的!!!监听一次就失效

有一下两类事件(节点相关的)以及连接zookeeper相关的状态

我们主要重点关注节点相关

可以设置观察的操作:exists,getChildren,getData

可以触发观察的操作:create,delete,setData

znode以某种方式发生变化时,“观察”(watch)机制可以让客户端得到通知.可以针对ZooKeeper服务的“操作”来设置观察,该服务的其他 操作可以触发观察.

这里需要需要注意的是:exists可以监控不存在的节点,当创建了该节点以后,则这个观察会被触发,之前的那个客户端就会得到通知.而getChildren,getData不可以

另外exists(path,true)监控的就是该path节点创建 删除 修改

而getChildren(path,watcher)监控的就是该path节点下的子节点的变化(子节点的创建、修改、删除都会监控到)这里有一点不是很友好,他们对应的事件都是一个 。我们需要自己来判断

这里可以用过保存上次getChildren获得的值 ,两个通过比较就知道具体是什么变化的了。

最后注意 :监控只是一次性的,如果要一直监控,需要多次设置。

Zookeeper系列2 原生API 以及核心特性watcher的更多相关文章

  1. curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API

    打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...

  2. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

  3. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  4. Zookeeper 系列(五)Curator API

    Zookeeper 系列(五)Curator API 一.Curator 使用 Curator 框架中使用链式编程风格,易读性更强,使用工程方法创建连接对象使用. (1) CuratorFramewo ...

  5. ZooKeeper 系列(一)—— ZooKeeper核心概念详解

    一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念         3.1 集群角色         3.2 会话         3.3 数据节点         3.4 节点 ...

  6. ZooKeeper系列(一)—— ZooKeeper 简介及核心概念

    一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...

  7. 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用

    温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...

  8. (原) 2.1 Zookeeper原生API使用

    本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...

  9. ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用

    这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...

随机推荐

  1. JavaScript常见的代码精简

    1.&& callback && callback() 等价于: if(callback){ callback(); } 表达的意思: 先判断 callback 是不是 ...

  2. TensorFlow 安装报错的解决办法(安装1.5版本)

    1.安装Anaconda 百度下载windows版本,一路点下一步,安装好了Anaconda,自带python3.6.6. 2.安装TensorFlow (1)打开Anaconda Prompt,输入 ...

  3. python使用xlrd读取excel数据时,整数变小数的解决办法

    python使用xlrd读取excel数据时,整数变小数: 解决方法: 1.有个比较简单的就是在数字和日期的单元格内容前加上一个英文的逗号即可.如果数据比较多,也可以批量加英文逗号的前缀(网上都有方法 ...

  4. leetcode每日刷题计划-简单篇day2

    今天数模比赛爆肝&操作系统大作业 脖子疼orz先把题过了保证flag不倒..个别细节回头看吧 Num 13 罗马数字转整数 Roman to Integer 一遍提交过,开始编译出了点问题 具 ...

  5. a.vim 插件

    引用自  https://blog.csdn.net/zhangsming/article/details/42652695 vim插件之快速切换头(.h)/源(.c,.cpp,.cc)文件——a.v ...

  6. scp: command not found

    scp 不能用? [root@doc]# scp jdk-8u144-linux-x64.tar.gz root@10.10.10.17:/root/ root@10.10.10.17's passw ...

  7. leetcode581

    public class Solution { public int FindUnsortedSubarray(int[] nums) { , end = -, min = nums[n - ], m ...

  8. Java 8 方法引用

    转自:https://www.runoob.com/java/java8-method-references.html 方法引用通过方法的名字来指向一个方法. 方法引用可以使语言的构造更紧凑简洁,减少 ...

  9. BASIC GIT WORKFLOW

    BASIC GIT WORKFLOW Generalizations You have now been introduced to the fundamental Git workflow. You ...

  10. sourcetree合并分支

    参考: https://blog.csdn.net/qq_34975710/article/details/74469068