Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

ZooKeeper 的 Watch 一直有效吗?

查看完整题解

参考回答

直接回答

普通 get -w、ls -w 与 exists 方式登记的 Watch 是一次性的。ZooKeeper 3.6 起可以用 addWatch 挂持久或持久递归监听,触发后继续监视。

讲清原理

持久递归监听覆盖指定路径和后代,发节点创建、删除与数据改变等事件。后代的创建或删除已能表达子树变化,因此递归模式不再额外发送 NodeChildrenChanged。会话过期后要重新建立所需监听。

一次性 Watch 触发后,读状态并重新登记
一次性 Watch 触发后,读状态并重新登记

例子与易错点

监听一份配置用普通 Watch,事件到达后用带监听的读取一起拿新值。管理整棵目录树时,可按范围选择持久递归模式。

延伸阅读 ZooKeeper 的 Watcher 怎样工作? · 一次 ZooKeeper 监听从注册到回调经历什么? · 使用 ZooKeeper Watch 有哪些容易踩的坑?

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。