|
Watcher是Zookeeper用来实现distribute lock, distribute configure, distribute queue等应用的主要手段。要监控data_tree上的任何节点的变化(节点本身的增加,删除,数据修改,以及孩子的变化)都可以在获取该数据时注册 一个Watcher,这有很像Listener模式。一旦该节点数据变化,Follower会发送一个notification response,client收到notification响应,则会查找对应的Watcher并回调他们。 有以下接口可以注册Watcher:
Java代码
- 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的使用与注意事项:
Java代码
- 1.Watcher需要每次都要注册。
- 2.Watcher回调之后就销毁如果打算再次回调就需要再次注册
|
|
|