1.ZooKeeper Watcher

  ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,

当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理

  ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些事件触

发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

  触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等: 

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

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

  总的来说可以概括 Watcher 为以下三个过程:客户端向服务端注册 Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况

2.Watch 机制特点

  一次性触发:事件发生触发监听,一个 watcher event 就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发

  事件封装 :ZooKeeper 使用 WatchedEvent 对象来封装服务端事件并传递,WatchedEvent 包含了每一个事件的三个基本属性:

通知状态(keeperState),事件类型(EventType)和节点路径(path)

  Event 异步发送:watcher 的通知事件从服务端发送到客户端是异步的。

  先注册再触发:Zookeeper 中的 watch 机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,通知给客户端

3.通知状态和事件类型

  同一个事件类型在不同的通知状态中代表的含义有所不同,下表列举了常见的通知状态和事件类型(先注册才能设置监听)

  

  其中连接状态事件(type=None, path=null)不需要客户端注册,客户端只要有需要直接处理就行了

4.Shell 客户端设置 watcher

  设置节点数据变动监听:

  

  通过另一个客户端更改节点数据:

  

  此时设置监听的节点收到通知:

  

2.org.apache.zookeeper.Watcher

  Watcher 接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含 KeeperState 和 EventType 两个枚举类,分别代表了通知状态和事件类型,

同时定义了事件的回调方法:process(WatchedEvent event)

  process 方法是 Watcher 接口中的一个回调方法,当 ZooKeeper 向客户端发送一个 Watcher 事件通知时,客户端就会对相应的 process 方法进行回调,

从而实现对事件的处理。 

if (event.getState() == KeeperState.SyncConnected) {
latch.countDown();
} // 发生了waitPath的删除事件
if (event.getType() == EventType.NodeDeleted && event.getPath().equals(waitPath)) {
doSomething();
}

  

  

  

  

 

  

  

  
  

  

8.7.ZooKeeper Watcher监听的更多相关文章

  1. Zookeeper数据类型、节点类型、角色、watcher监听机制

    1.Zookeeper数据类型:层次化目录结构+少量数据 Zookeeper包含层次化的目录结构,每个Znode都有唯一的路径标识,Znode可以包含数据和子节点. 其中Znode数据可以有多个版本, ...

  2. Zookeeper中的watcher监听和leader选举机制

    watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...

  3. Zookeeper中Watcher监听实现增删改

    8.1 连接方法 package com.zookeeper.day01; import org.apache.zookeeper.*; import java.io.IOException; pub ...

  4. zookeeper事件监听

    原来有两张表,一张是公司的,一张的产品的,项目中用来查询,不需要增删改.现在增删改交给另一项目去维护,由他们变更时同步数据到zk,我们去取.很明显,这里需要一个监听器,每次他项目发起数据变更时,我方必 ...

  5. Watcher监听

    可以设置观察的操作:exists,getChildren,getData 可以触发观察的操作:create,delete,setData   zookeeper观察机制; 服务端只存储事件的信息,客户 ...

  6. zookeeper的监听

    统一配置管理.统一命名服务.分布式锁.集群管理

  7. ZooKeeper(3.4.5) 使用Curator监听事件

    转载:http://www.mamicode.com/info-detail-494364.html 标签: ZooKeeper原生的API支持通过注册Watcher来进行事件监听,但是Watcher ...

  8. ZooKeeper(3.4.5) - 使用 Curator(2.7.0) 监听事件

    ZooKeeper原生的API支持通过注册Watcher来进行事件监听,但是Watcher通知是一次性的,因此开发过程中需要反复注册Watcher,比较繁琐.Curator引入了Cache来监听Zoo ...

  9. ZooKeeper监听机制

    前言:Zookeeper的监听机制很多人都踩过坑,感觉实现了watcher 接口,后面节点的变化都会一一推送过来,然而并非如此. Watch机制官方声明:一个Watch事件是一个一次性的触发器,当被设 ...

随机推荐

  1. javascrip参考资料

    阮一峰: http://javascript.ruanyifeng.com/ 廖雪峰: https://www.liaoxuefeng.com/ Mozila: https://developer.m ...

  2. laravel如何打印orm封装的sql语句

    $query = CdbForumSellthreadSearch::where($params)->orderBy("$orderby", "$ascDesc&q ...

  3. 2. bash基础

    通配符 通配符 功能说明 实例 * 匹配所有字符 ls *.o ? 匹配所有的当个字符 ls net??? [a-z] 匹配属于a到z范围集合内的一个字符 ls [a-i]* [...] 与方括号内的 ...

  4. unieap 导出文档错误

    java.lang.reflect.InvocationTargetException at org.eclipse.jface.operation.ModalContext.run(ModalCon ...

  5. 在学习python的Django\Flask\Tornado前你需要知道的,what is web?

    我们都在讲web开发web开发,那到底什么是web呢? 如果你正在学习python三大主流web框架,那这些你必须要知道了 软件开发架构: C/S架构:Client/Server    客户端与服务端 ...

  6. [转帖]LINUX网络配置---nmtui&nmcli

    LINUX网络配置---nmtui&nmcli https://blog.51cto.com/13625527/2151853?source=dra 两年前曾经打打印过 几页命令 里面就有 n ...

  7. 【转帖】Linux和GNU系统

    Linux和GNU系统 Richard Stallman 著 http://www.gnu.org/gnu/linux-and-gnu.zh-cn.html 更多信息,请同时参看GNU/Linux常见 ...

  8. 【转帖】Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较

    Linux的桌面环境gnome.kde.xfce.lxde 等等使用比较 https://www.cnblogs.com/chenmingjun/p/8506995.html 文章目录 图形界面架起用 ...

  9. python报错及处理 -- 不断总结

    ModuleNotFoundError: No module named 'PIL' 解决方法: 运行命令:pip install Pillow IndentationError: expected ...

  10. 【LOJ】#3090. 「BJOI2019」勘破神机

    LOJ#3090. 「BJOI2019」勘破神机 为了这题我去学习了一下BM算法.. 很容易发现这2的地方是\(F_{1} = 1,F_{2} = 2\)的斐波那契数列 3的地方是\(G_{1} = ...