关闭

zookeeper系列之异步通知模式-Watcher

511人阅读 评论(0) 收藏 举报
分类:

Watcher介绍

 

Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及孩子的变化)都可以在获取该数据时注册一个Watcher,这有很像Listener模式。一旦该节点数据变化,Follower会发送一个notification response,client收到notification响应,则会查找对应的Watcher并回调他们。 有以下接口可以注册Watcher:

1. Stat exists(final String path, Watcher watcher)

2. Stat exists(String path, boolean watch)

3. void exists(String path, boolean watch, StatCallback cb, Object ctx)

4. void exists(final String path, Watcher watcher, StatCallback cb, Object ctx)

5. byte[] getData(final String path, Watcher watcher, Stat stat)

6. byte[] getData(String path, boolean watch, Stat stat)

7. void getData(final String path, Watcher watcher, DataCallback cb, Object ctx)

8. void getData(String path, boolean watch, DataCallback cb, Object ctx)

9. List<string> getChildren(final String path, Watcher watcher)

10. List<string> getChildren(String path, boolean watch)

11. 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总是会被通知。

0
0
查看评论

Zookeeper如何正确设置和获取watcher

Watcher 设置是开发中最常见的,需要搞清楚watcher的一些基本特征,对于exists、getdata、getchild对于节点的不同操作会收到不同的 watcher信息。对父节点的变更以及孙节点的变更都不会触发watcher,而对watcher本身节点以及子节点的变更会触发watcher,...
  • qq910894904
  • qq910894904
  • 2014-12-04 17:08
  • 12198

分析Zookeeper不提供永久Watcher的原因并如何保证获取最新数据

(1)在使用ZooKeeper的过程中,相信很多人都有这样的疑问,为什么不提供一个持久的Watcher注册机制呢? 不支持用持久Watcher的原因很简单,如果Watcher的注册是持久的,那么必然导致服务端的每次数据更新都会通知到客户端——这在数据变更非常频繁的场景下,ZooKeeper无...
  • hongshun0651140
  • hongshun0651140
  • 2015-11-07 21:23
  • 3197

Zookeeper的API调用的同步和异步机制以及watcher机制总结

同步和异步调用 对于zookeeper的所有API调用都提供了正常的同步调用和异步调用两种类型的调用接口,比如zookeeper创建某个目录节点的接口为例: 同步调用接口: String create(final String path, byte data[], List acl,  ...
  • qq838642798
  • qq838642798
  • 2017-09-25 15:53
  • 282

基于nodejs+zookeeper服务发现

本文使用nodejs作为微服务API网关,从而将消费端的请求,随机路由到一个可用的服务节点上。
  • jrn1012
  • jrn1012
  • 2017-08-10 11:08
  • 1057

zookeeper系列之异步通知模式-Watcher

Watcher介绍   Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及孩子的变化)...
  • z69183787
  • z69183787
  • 2016-08-30 13:44
  • 511

zookeeper系列之异步通知模式-Watcher

Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及孩子的变化)都可以在获取该数据时注册一个Watch...
  • crazyhacking
  • crazyhacking
  • 2014-04-17 12:02
  • 6562

Zookeeper异步通知模式--watcher

转载自: http://zoutm.iteye.com/blog/708468 http://blog.csdn.net/qq910894904/article/details/41726279 Watcher介绍:   Watcher是Zookeeper用来实现distribute loc...
  • luojinbai
  • luojinbai
  • 2015-09-04 22:59
  • 560

nodejs的zookeeper模块及web管理工具node-zk-browser的安装

nodejs的zookeeper模块及web管理工具node-zk-browser的安装,来源一路博客:http://www.16boke.com/article/detail/151
  • wyc_cs
  • wyc_cs
  • 2016-06-01 10:29
  • 2671

zookeeper如何永久监听

一 回调基础知识   znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。 //创建...
  • sunnylinner
  • sunnylinner
  • 2016-07-24 13:26
  • 1213

zookeeper的watcher监听不到zk后续数据的变化问题

1 watcher函数原型 24 void watcher(zhandle_t *zzh, int type, int state, const char *path, void *watcherCtx) 1.1 Watch事件类型(type)   ZOO_CR...
  • emeitu
  • emeitu
  • 2016-06-02 17:08
  • 4375
    个人资料
    • 访问:9399499次
    • 积分:78810
    • 等级:
    • 排名:第21名
    • 原创:264篇
    • 转载:2888篇
    • 译文:3篇
    • 评论:802条
    文章分类
    最新评论