Zookeeper异步通知模式--watcher
来源:互联网 发布:array push 二维数组 编辑:程序博客网 时间:2024/06/06 00:06
转载自:
http://zoutm.iteye.com/blog/708468
http://blog.csdn.net/qq910894904/article/details/41726279
Watcher介绍:
Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及孩子的变化)都可以在获取该数据时注册一个Watcher,这有很像Listener模式。一旦该节点数据变化,Follower会发送一个notification response,client收到notification响应,则会查找对应的Watcher并回调他们。 有以下接口可以注册Watcher:
Stat exists(final String path, Watcher watcher)
Stat exists(String path, boolean watch)
void exists(String path, boolean watch, StatCallback cb, Object ctx)
void exists(final String path, Watcher watcher, StatCallback cb, Object ctx)
byte[] getData(final String path, Watcher watcher, Stat stat)
byte[] getData(String path, boolean watch, Stat stat)
void getData(final String path, Watcher watcher, DataCallback cb, Object ctx)
void getData(String path, boolean watch, DataCallback cb, Object ctx)
List getChildren(final String path, Watcher watcher)
List getChildren(String path, boolean watch)
void getChildren(final String path, Watcher watcher,ChildrenCallback cb, Object ctx)
如果参数需要传递watcher,则可以自己定义Watcher进行回调处理。如果是Boolean型变量,当为true时,则使用系统默认的Watcher,系统默认的Watcher是在zookeeper的构造函数中传递的Watcher。如果Watcher为空或者Boolean变量时为false,则表明不注册Watcher。如果获取数据后不需要关注该数据是否变化,就不需要注册Watcher。上面没有返回值的都是异步调用模式。需要注意的是,一旦Watcher被调用后,将会从map中删除,如果还需要关注数据的变化,需要再次注册。 Watcher原理 要搞清楚Watcher的原理,让我们看看Watcher的工作流程。
Watcher的使用与注意事项
Watcher需要每次都要注册。
并不是Watcher的节点被修改n次,客户端注册就会被通知n次。如果watcher的节点频繁被修改,有可能修改了10次,客户端被通知8次。如果client与server连接状态发生改变,watcher总是会被通知。
Watcher通知类型:
- state=-112 会话超时状态
- state= -113 认证失败状态
- state= 1 连接建立中
- state= 2 (暂时不清楚如何理解这个状态,ZOO_ASSOCIATING_STATE)
- state=3 连接已建立状态
- state= 999 无连接状态
- type=1 创建节点事件
- type=2 删除节点事件
- type=3 更改节点事件
- type=4 子节点列表变化事件
- type= -1 会话session事件
- type=-2 监控被移除事件
对父节点的变更以及孙节点的变更都不会触发watcher,而对watcher本身节点以及子节点的变更会触发watcher,具体参照下表。
注:×表示否,√表示是。
更多参见 http://tech.uc.cn/?p=1189,不过该文章中第五节对event和state的说明有误,请仔细辨别。
- Zookeeper异步通知模式--watcher
- zookeeper系列之异步通知模式-Watcher
- zookeeper系列之异步通知模式-Watcher
- zookeeper系列之异步通知模式-Watcher
- zookeeper系列之异步通知模式-Watcher
- zookeeper通知watcher
- Zookeeper的watcher数据变更通知机制
- Zookeeper-Watcher机制与异步调用原理
- Zookeeper-Watcher机制与异步调用原理
- 【ZooKeeper Notes 13】ZooKeeper Watcher的事件通知类型
- Zookeeper--Watcher
- Zookeeper(十)Watcher——数据变更的通知
- zookeeper 中 Watcher 通知机制的一点理解
- ZooKeeper Watcher执行顺序
- zookeeper watcher功能分析
- zookeeper watcher功能分析
- zookeeper watcher功能分析
- ZooKeeper Watcher执行顺序 ********************
- 分析Linux Apache为何访问过慢
- MATLAB-fminsearch函数的使用
- Java内存分配原理深入理解
- ZJOI2008 树的统计 树链剖分学习
- [转]Python traceback
- Zookeeper异步通知模式--watcher
- 支付宝开发的几个问题
- 让nginx作为图片处理服务器
- idea使用过程遇到问题集一
- dynamic_cast的用法
- Servlet入门时候的坑
- mysql SQL Select 语句 简单应用
- 剑指offer 调整数组顺序使奇数位于偶数前面
- SparseArray替代HashMap来提高性能