在 Dubbo 中,当一个 Dubbo 服务向 ZooKeeper 注册时,它将创建一个持久化的节点,并在该节点下创建一个临时节点,用于保存该 Dubbo 服务的信息。当 Dubbo 应用关闭时,ZooKeeper 会检测到该临时节点已经失去连接,并将该节点从 ZooKeeper 中删除。这个过程可以通过 Dubbo 的 dubbo.registry.retry.period 配置来控制。然而,即使 Dubbo 应用关闭,Dubbo 服务在 ZooKeeper 上注册的节点也不会立即删除,因为 Dubbo 在应用关闭时没有主动调用 unregister 方法将该节点从 ZooKeeper 中删除,而是等待 ZooKeeper 客户端在一定时间内检测到该节点失去连接后自动删除。当 ZooKeeper 重启时,它会从磁盘上的快照中恢复节点信息。因此,如果在 Dubbo 应用关闭之前,ZooKeeper 客户端已经与 ZooKeeper 服务器进行了通信并成功创建了 Dubbo 服务节点,那么即使 Dubbo 应用已经关闭,该节点信息仍然会被保存在 ZooKeeper 的磁盘快照中,并在 ZooKeeper 重启后重新加载。在 ZooKeeper 的命令行中使用 ls /dubbo 命令查看 Dubbo 服务节点的信息时,实际上是从 ZooKeeper 服务器的内存缓存中获取节点信息。因此,即使 Dubbo 应用已经关闭,你仍然可以通过 ls /dubbo 命令查看 Dubbo 服务节点的信息。但是,当 ZooKeeper 客户端检测到 Dubbo 服务节点失去连接后,它会从内存缓存中删除该节点信息,这时再次执行 ls /dubbo 命令时,该节点信息将不再显示。
在 Dubbo 中,当一个 Dubbo 服务向 ZooKeeper 注册时,它将创建一个持久化的节点,并在该节点下创建一个临时节点,用于保存该 Dubbo 服务的信息。当 Dubbo 应用关闭时,ZooKeeper 会检测到该临时节点已经失去连接,并将该节点从 ZooKeeper 中删除。这个过程可以通过 Dubbo 的 dubbo.registry.retry.period 配置来控制。
然而,即使 Dubbo 应用关闭,Dubbo 服务在 ZooKeeper 上注册的节点也不会立即删除,因为 Dubbo 在应用关闭时没有主动调用 unregister 方法将该节点从 ZooKeeper 中删除,而是等待 ZooKeeper 客户端在一定时间内检测到该节点失去连接后自动删除。
当 ZooKeeper 重启时,它会从磁盘上的快照中恢复节点信息。因此,如果在 Dubbo 应用关闭之前,ZooKeeper 客户端已经与 ZooKeeper 服务器进行了通信并成功创建了 Dubbo 服务节点,那么即使 Dubbo 应用已经关闭,该节点信息仍然会被保存在 ZooKeeper 的磁盘快照中,并在 ZooKeeper 重启后重新加载。
在 ZooKeeper 的命令行中使用 ls /dubbo 命令查看 Dubbo 服务节点的信息时,实际上是从 ZooKeeper 服务器的内存缓存中获取节点信息。因此,即使 Dubbo 应用已经关闭,你仍然可以通过 ls /dubbo 命令查看 Dubbo 服务节点的信息。但是,当 ZooKeeper 客户端检测到 Dubbo 服务节点失去连接后,它会从内存缓存中删除该节点信息,这时再次执行 ls /dubbo 命令时,该节点信息将不再显示。