有没有办法在zookeeper中添加观察者队列?

Pra*_*nna 7 node.js apache-zookeeper

我将node-zookeeper-client用作java脚本作为zookeeper客户端.

我有这样的事情:

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
}
Run Code Online (Sandbox Code Playgroud)

此功能将path在zookeeper中设置一个手表.一旦触发了手表,将调用观察者回调并调用在手表上调用的适当功能.

对于这样设置的手表:

setWatch('/data1', function1);
setWatch('/data2', function2);
Run Code Online (Sandbox Code Playgroud)

因此,在data1节点中触发的监视执行function1,为data2节点触发的监视执行function2

现在,如果我必须不断监视节点,以便每次更改某些内容,我都必须在触发后立即重新注册:

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
}
Run Code Online (Sandbox Code Playgroud)

现在我对zookeeper手表的了解是:

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

由于上面提到的第二点,在手表触发和重新注册手表的时间段之间可能会丢失更改.正如zookeeper官方文档中所提到的那样.

所以我想知道是否有一种方法可以实际为同一节点设置多个监视(以队列排序方式),并且每次触发监视时,只调用一个触发器回调.像这样的东西:

setWatch(node, functionToTrigger, noOfWatchesInQueue)
Run Code Online (Sandbox Code Playgroud)

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

对于触发器1,watch1被激活
用于触发器2,手表2等等......

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

有没有办法获得这个?我不知道这是否已在某处完成,任何类型的研究材料或有关该问题的实施也会有所帮助.

小智 -1

我认为你应该始终做到以下几点:

  1. 设置 znode 的监视

  2. 检索 znode 的实际值

这样,您将始终了解 znode 的最新版本,并在将来发生更改时收到通知。另请注意,每个 znode 都有版本号 - 您可以轻松检查它是否已更改。