在 ZooKeeper 中,节点监视(watch)通知不是永久的,而是一次性触发。当客户端注册一个监视事件,例如监视一个节点的数据变化或子节点的变化时,如果相应的节点状态发生了变化,ZooKeeper 会通知客户端,并触发监视事件。一旦监视事件被触发,它会从客户端的监视列表中删除,客户端需要再次显式设置监视,以便继续监视节点的状态变化。这种一次性的监视通知机制有助于避免客户端在不再需要监视的情况下浪费资源。如果客户端需要持续监视节点状态的变化,它必须在每次触发监视后重新设置监视,以确保不会错过后续的变化通知。
值得注意的是,从 ZooKeeper 版本 3.5.0 开始,引入了永久监听(persistent watch)的支持。这意味着一旦触发了监听事件,除非客户端显式取消监听,否则 ZooKeeper 将持续向客户端发送通知,而不仅仅触发一次。这对于需要持续监视节点状态的情况非常有用,客户端不需要反复设置监视,可以持续接收到节点状态的变化通知。
这个改进提高了 ZooKeeper 的灵活性和适用性,允许开发人员更精细地控制监视行为,以满足不同应用场景的需求。
![](/images/780-200-2.jpg)