`

Zookeeper系列之观察者模式-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的使用与注意事项
1.Watcher需要每次都要注册。
2.Watcher回调之后就销毁如果打算再次回调就需要再次注册
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics