- 可以设置watch的操作
getData()
getChildren()
exists()
- watch event的类型
Created event: 发送到exists()设置的watch
Deleted event: 发送到exists()、getChildren()、getData()设置的watch
Changed event: 发送到exists()、getData()设置的watch
Child event: 发送到getChildren()设置的watch
当client主动删除设置的watch时,会触发下列两种event
Child Remove event: 发送到getChildren()设置的watch
Data Remove event: 发送到exists()、getData()设置的watch
注意:
- 如果两个操作设置了同样watch, watch event也只会通知一次,比如exists()和getData()都设置了watch,那么当执行delete或者set方法的时候,deleted event或changed event都只会通知一次。
- watch event的通知是异步的,有可能修改znode的客户端已经成功返回结果,但是设置watch的client还没有收到对应的event,但是zookeeper会保证设置watch的client只有先接受到相应的watch event后才能看到znode的数据变化。
- 如果设置的watch被触发,那么这个watch会被zookeeper删除,如果仍然想继续监控znode的变化,client就要重新设置watch.
- 因为收到watch event可能会有延迟,如果在event发送后但client还没接收并重新设置watch之前,znode的数据又发生了变化,则client没办法监控到这些变化
- client断开连接时,是没办法接收watch event的,当client重新连接时会重新建立watch,并接收错过的watch event。
- 如果client对一个znode通过exist()方法设置了一个watch,如果client断开连接后,这个znode被创建然后又被删除,即使client再次重新连接,也不会收到create event的。
- 会触发watch event的操作
create: 会触发本节点的Created event以及父节点的Child event
set:会触发本节点的Changed event
delete: 会触发本节点的Deleted event、Changed event、Child event以及父节点的Child event