当一个dubbo服务注册到zookeeper之后,即使这个dubbo应用关掉,为什么zookeeper中依然可以查询?

dubbo应用已经关掉,zookeeper也已经重启
为什么ls /dubbo 这个命令依然可以查到到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 命令时,该节点信息将不再显示。

以上是 当一个dubbo服务注册到zookeeper之后,即使这个dubbo应用关掉,为什么zookeeper中依然可以查询? 的全部内容, 来源链接: utcz.com/p/945004.html

回到顶部