美文网首页
ZooKeeper从入门到精通4:watch触发器

ZooKeeper从入门到精通4:watch触发器

作者: 金字塔下的小蜗牛 | 来源:发表于2020-04-07 13:18 被阅读0次

1. watch概述

ZooKeeper可以为所有的读操作设置watch,这些读操作包括:exists()、getChildren()及getData()。

watch事件是一次性的触发器,当watch的对象状态发生改变时,将会触发此对象上watch所对应的事件。

watch事件将被异步地发送给客户端,并且ZooKeeper为watch机制提供了有序的一致性保证。

理论上,客户端接收watch事件的时间要快于其看到watch对象状态变化的时间。

2. watch类型

ZooKeeper所管理的watch可以分为两类:

  1. 数据watch(data watches):getData和exists负责设置数据watch;
  2. 孩子watch(child watches):getChildren负责设置孩子watch;

可以通过操作返回的数据来设置不同的watch:

  1. getData和exists:返回关于节点的数据信息;
  2. getChildren:返回孩子列表;

因此:

  1. 一个成功的setData操作将触发Znode的数据watch;
  2. 一个成功的create操作将触发Znode的数据watch以及孩子watch;
  3. 一个成功的delete操作将触发Znode的数据watch以及孩子watch;

3.watch注册与触发

image
  1. exists操作上的watch,在被监视的Znode创建、删除或数据更新时被触发。
  2. getData操作上的watch,在被监视的Znode删除或数据更新时被触发。在被创建时不能被触发,因为只有Znode一定存在,getData操作才会成功。
  3. getChildren操作上的watch,在被监视的Znode的子节点创建或删除,或是这个Znode自身被删除时被触发。可以通过查看watch事件类型来区分是Znode,还是他的子节点被删除:NodeDelete表示Znode被删除,NodeDeletedChanged表示子节点被删除。

watch由客户端所连接的ZooKeeper服务器在本地维护,因此watch可以非常容易地设置、管理和分派。当客户端连接到一个新的服务器 时,任何的会话事件都将可能触发watch。另外,当从服务器断开连接的时候,watch将不会被接收。但是,当一个客户端重新建立连接的时候,任何先前注册过的watch都会被重新注册。

4.注意事项

Zookeeper的watch实际上要处理两类事件:

  1. 连接状态事件(type=None, path=null):这类事件不需要注册,也不需要我们连续触发,我们只要处理就行了。
  2. 节点事件:节点的建立,删除,数据的修改。它是one time trigger,我们需要不停的注册触发,还可能发生事件丢失的情况。

上面2类事件都在watch中处理,也就是重载的process(Event event)

节点事件的触发,通过函数exists,getData或getChildren来处理这类函数,有双重作用:1.注册触发事件;2.函数本身的功能。

函数的本身的功能又可以用异步的回调函数来实现,重载processResult()过程中处理函数本身的的功能。

相关文章

网友评论

      本文标题:ZooKeeper从入门到精通4:watch触发器

      本文链接:https://www.haomeiwen.com/subject/ydmkdhtx.html