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手表的了解是:
由于上面提到的第二点,在手表触发和重新注册手表的时间段之间可能会丢失更改.正如zookeeper官方文档中所提到的那样.
所以我想知道是否有一种方法可以实际为同一节点设置多个监视(以队列排序方式),并且每次触发监视时,只调用一个触发器回调.像这样的东西:
setWatch(node, functionToTrigger, noOfWatchesInQueue)
Run Code Online (Sandbox Code Playgroud)
因此,我们将为同一节点设置多个监视,并且对于触发器,仅触发其中一个设置监视.因此,如果我在队列中为同一节点设置3个手表,即
对于触发器1,watch1被激活
用于触发器2,手表2等等......
这样,在重新注册手表所用的时间内不会错过任何事件.
有没有办法获得这个?我不知道这是否已在某处完成,任何类型的研究材料或有关该问题的实施也会有所帮助.
小智 -1
我认为你应该始终做到以下几点:
设置 znode 的监视
检索 znode 的实际值
这样,您将始终了解 znode 的最新版本,并在将来发生更改时收到通知。另请注意,每个 znode 都有版本号 - 您可以轻松检查它是否已更改。