zookeeper
zookeeper 是流行的高性能分布式协调工具,它提供了分布式环境中需要的命名服务,配置管理,分布式锁,注册中心,Leader 选举等等功能,应用十分广泛。
zookeeper 的 watcher
Client 可以在 zookeeper 的节点(znode)上设置监听器(watcher),当节点被修改时,zookeeper 会向客户端发送一个相应的通知。
可以通过 getData()
,getChildren()
和 exists()
三个方法来设置 watcher。以 getData()
的方法签名为例:
public byte[] getData(String path, boolean watch, Stat stat);
方法的第二个参数便表示是否在当前 path 上注册 watcher。
watcher 流程
watcher 的注册与触发流程大致如下:
为了高性能考虑,zookeeper 的 watcher 被设计成很轻量级。上图 Client 与 Server 交互过程中,Client 并没有把 watcher 实例传给 Server 端,而只是设置一个标识位告诉它要监听某个节点的变化