当前位置: 代码迷 >> 综合 >> zookeeper读书笔记七 watch
  详细解决方案

zookeeper读书笔记七 watch

热度:119   发布时间:2023-10-13 18:26:22.0
  • 可以设置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

 

注意:

  1. 如果两个操作设置了同样watch, watch event也只会通知一次,比如exists()和getData()都设置了watch,那么当执行delete或者set方法的时候,deleted event或changed event都只会通知一次。
  2. watch event的通知是异步的,有可能修改znode的客户端已经成功返回结果,但是设置watch的client还没有收到对应的event,但是zookeeper会保证设置watch的client只有先接受到相应的watch event后才能看到znode的数据变化。
  3. 如果设置的watch被触发,那么这个watch会被zookeeper删除,如果仍然想继续监控znode的变化,client就要重新设置watch.
  4. 因为收到watch event可能会有延迟,如果在event发送后但client还没接收并重新设置watch之前,znode的数据又发生了变化,则client没办法监控到这些变化
  5. client断开连接时,是没办法接收watch event的,当client重新连接时会重新建立watch,并接收错过的watch event。
  6. 如果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