Apache zookeeper 可靠地监视Zookeeper中的节点

Apache zookeeper 可靠地监视Zookeeper中的节点,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,考虑到启动时节点可能不存在或可能被删除并重新创建,是否有任何简单的方法始终确保我仅使用手表而不使用轮询获得Zookeeper中节点的最新状态(数据和/或子节点)?我尝试过这样做,但结果证明这样做非常复杂(设置所需的多个手表,避免在错误的时间创建或删除节点时可能导致数据丢失的竞争条件),我放弃了,转而进行轮询。(对于我的应用程序来说,落后几秒钟并不是问题,但是错过一个更改是很糟糕的,错过所有未来的更改是非常糟糕的。) 我使用的是Java中的Curator,它有一些方法可以简化一些事情,但这似乎不是

考虑到启动时节点可能不存在或可能被删除并重新创建,是否有任何简单的方法始终确保我仅使用手表而不使用轮询获得Zookeeper中节点的最新状态(数据和/或子节点)?我尝试过这样做,但结果证明这样做非常复杂(设置所需的多个手表,避免在错误的时间创建或删除节点时可能导致数据丢失的竞争条件),我放弃了,转而进行轮询。(对于我的应用程序来说,落后几秒钟并不是问题,但是错过一个更改是很糟糕的,错过所有未来的更改是非常糟糕的。)


我使用的是Java中的Curator,它有一些方法可以简化一些事情,但这似乎不是其中之一。

如果使用Curator,则对单个节点使用NodeCache,对节点的所有子节点使用PathChildrenCache


注:我是《馆长》的主要作者

谢谢!不知怎么的,我没有注意到。nodecachejavadoc说“这个类的用户必须为误报和误报做好准备。”什么是“误报”?这些类能保证任何变化都会被告知听众吗?好的,说“这只是总结ZooKeeper是一个最终一致的系统。PathChildrenCache在任何给定的时间点都不会精确。但是,最终,它会看到所有的变化。”并说了类似的话。对我来说已经够好了,“假阴性”是什么意思?这些类是否保证任何更改都会通知侦听器?这是否意味着?ZK是一种最终一致的机制。您可能会收到一个节点已被删除的通知,但当您收到该消息时,另一个客户端可能已重新创建该节点,等等。