深入解析dubbo服务注册与zookeeper节点持久化机制
在分布式服务治理中,Dubbo框架将服务信息注册到ZooKeeper,方便服务消费者进行发现和调用。然而,即使Dubbo应用已停止运行,甚至ZooKeeper重启后,仍然能在ZooKeeper中看到之前注册的服务信息,这引发了诸多疑问。
Dubbo并非简单地创建和删除ZooKeeper节点。它实际创建两种节点:
- 持久化节点: 存储服务的元数据信息,即使服务关闭,该节点也不会自动删除。
- 临时节点: 标识服务的运行状态。Dubbo应用关闭后,ZooKeeper客户端连接断开,ZooKeeper会自动清除此节点。dubbo.registry.retry.period配置项影响客户端检测连接断开和移除节点的频率。
关键在于:Dubbo应用关闭时不会主动删除持久化节点。ZooKeeper的持久化机制确保了持久化节点即使在服务关闭或ZooKeeper重启后依然存在于磁盘快照中,并在重启后恢复到内存。因此,使用ls /dubbo命令仍然可以看到这些信息,因为命令读取的是ZooKeeper服务器内存中的节点数据。
虽然持久化节点保留,但临时节点已消失,ZooKeeper已感知到服务不可用。持久化节点信息的保留,直到管理员手动删除。
因此,即使Dubbo应用关闭并重启ZooKeeper,依然能看到之前注册的服务信息,是ZooKeeper持久化节点机制和Dubbo应用未主动注销持久化节点的共同结果。这并非错误,而是Dubbo和ZooKeeper架构设计使然。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END