首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法在动物园管理员中增加观察队列吗?

有办法在动物园管理员中增加观察队列吗?
EN

Stack Overflow用户
提问于 2017-12-21 11:51:18
回答 2查看 1.2K关注 0票数 8

我正在使用节点-动物园管理员-客户端为java脚本作为一个动物园管理员客户端。

我有这样的事情:

代码语言:javascript
复制
const setWatch = (path, functionToExecuteOnTrigger) => {
  client.getData(path, (event) => {
      // watcher set here
      functionToExecuteOnTrigger(event);
  }, null)
  // null because we are only setting watch here and do not need data
}

这个函数将在动物园管理员的path上设置一个手表。一旦触发手表,将调用观察者回调,并调用要在手表上调用的适当函数。

对于像这样的手表:

代码语言:javascript
复制
setWatch('/data1', function1);
setWatch('/data2', function2);

因此,function1是针对在data1节点中触发的手表执行的,function2是针对在data2节点中触发的表执行的。

现在,如果我必须持续监视节点,以便每次发生更改时,我将不得不在触发表后立即重新注册:

代码语言:javascript
复制
const setWatch = (path, functionToExecuteOnTrigger) => {
  client.getData(path, (event) => {
      // watcher set here
      // immediately set another watch for the same function
      setWatch(path, functionToExecuteOnTrigger);
      functionToExecuteOnTrigger(event);
  }, null)
  // null because we are only setting watch here and do not need data
}

现在,我对动物园管理员手表的了解如下:

  • 有三种类型的手表;数据,儿童和存在。
  • 观察者是一次触发,即一旦触发,就必须重新注册它们以获得进一步的触发器。

由于上面提到的第二点,有可能在手表触发期间和重新注册手表之间发生丢失的更改。如动物园饲养员的正式文件所述。

因此,我想知道是否有一种方法可以为同一个节点设置多个手表(以队列的方式),每次触发手表时,只调用一个触发器回调。就像这样:

代码语言:javascript
复制
setWatch(node, functionToTrigger, noOfWatchesInQueue)

因此,我们将为同一节点设置多个监视,对于触发器,只触发其中的一个。因此,如果我在队列中为同一个节点设置了3个手表,即

对于触发器1,watch1被激活

为了触发2,看2等等.

这样,在重新注册手表所需的时间内,就不会错过任何事件。

有什么办法可以得到这个吗?我不知道是否已经在某个地方完成了这项工作,任何关于这个问题的研究材料或实现都会有帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-01-02 09:47:39

没有办法用一个操作在同一个节点上设置多个监视。这是故意的。

正如您所提到的,(以及根据文档),您只能在读取节点的值时设置一个手表。通过这种方式,您将始终拥有一个节点的最新值,并在节点更改时通知它。这是ZK提供的,而不是更多。

动物园管理员手表不是事件队列,也不能保证您会接收到每一个事件。

我认为更好的做法是描述您的用例,并试图为实现它的最佳工具找到答案,因为ZK可能不合适。

票数 0
EN

Stack Overflow用户

发布于 2017-12-22 06:50:38

我认为你应该做以下几件事:

  1. 为znode设置监视
  2. 检索znode的实际值

这样,您将始终知道znode的最新版本,并将在今后的更改中得到通知。还请注意,每个znode都有版本号--您可以轻松地检查它是否已更改。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47924402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档