Apache zookeeper 动物园管理员观看错过的活动

Apache zookeeper 动物园管理员观看错过的活动,apache-zookeeper,apache-curator,Apache Zookeeper,Apache Curator,在Zookeeper中,我们如何处理从上一个手表接收回拨和重置新手表之间的“数据更改丢失”事件。我正在尝试查看许多可用的解决方案,如ApacheCurator和internet上的其他建议。但我仍然不清楚 我们如何确保不会错过任何事件,或者是否有其他傻瓜式的方法确保不会错过zookeeper中的任何状态更改(尤其是节点数据更改)?? 我知道定期投票是一种方式。但是这很昂贵。首先,我不推荐使用Apache Curator。它有一些很好的包装,使事情超级方便和更强大。它可以处理很多您可能需要自己编写

在Zookeeper中,我们如何处理从上一个手表接收回拨和重置新手表之间的“数据更改丢失”事件。我正在尝试查看许多可用的解决方案,如ApacheCurator和internet上的其他建议。但我仍然不清楚

我们如何确保不会错过任何事件,或者是否有其他傻瓜式的方法确保不会错过zookeeper中的任何状态更改(尤其是节点数据更改)??
我知道定期投票是一种方式。但是这很昂贵。

首先,我不推荐使用Apache Curator。它有一些很好的包装,使事情超级方便和更强大。它可以处理很多您可能需要自己编写代码的事情(以及很难正确处理的事情)

第二,请参阅馆长文档中的技术说明:

这里的主要收获是,您为响应监视通知而编写的任何代码都应该尽快返回,并且永远不要阻塞(在i/o上或等待后续zk请求的响应,&c)

因此,我建议您(1)生成一个线程来处理监视启动的代码,(2)与在任何分布式/并发场景中一样,将数据验证为新线程中的代码首先要做的事情之一。它有一些开销,但比轮询好


定期的民意调查不应该和zookeeper一起玩——这就是手表的用途。您知道何时检查数据是否已更改。您可以检查data watch何时触发,以捕获您关心的后续更新类型

我不认为有什么方法可以永远不错过更新/活动

但是,由于接收到WatchedEvent对象,客户端代码必须读取最新的值。它不会通过事件对象传递。执行此操作时,将通过read方法调用传递一个新的或相同的Watcher实例,以注册将来的事件通知。这意味着您的客户机将始终获取最新的值,并且如果在此方法调用之后发生任何更改,将触发一个新事件

因此,尽管在接收事件和检索最新和最大值的操作之间可能会错过事件,但您的客户机仍将获得最新的值。他永远得不到最新的价值。介于两者之间的更改或值通常不感兴趣,如果它们感兴趣,那么您可能应该跳过ZooKeeper,寻找另一种通信机制


大量免责声明:我对《动物园管理员》完全陌生,这个答案只反映了通过阅读和谷歌搜索获得的知识。这就解释了为什么我不敢在这个答案中添加示例代码。哈哈。

谢谢你的宝贵建议,马修。甚至我也倾向于使用馆长!。我同意“我不认为有任何方法可以永远不错过更新/活动”。通过DUBBO存在观看事件丢失。