Dubbo服務下線后,ZooKeeper中為何仍殘留注冊信息?

Dubbo服務下線后,ZooKeeper中為何仍殘留注冊信息?

dubbo服務在zookeeper中殘留注冊信息的解析

在使用Dubbo框架時,開發者經常會遇到一個問題:即使Dubbo應用已停止運行,甚至ZooKeeper重啟,之前注冊的服務信息依然可以通過ZooKeeper命令行查看。本文將深入探討這一現象。

Dubbo服務注冊并非直接創建節點,而是創建持久化父節點,并在其下創建臨時節點存儲服務信息。此臨時節點的生命周期與Dubbo應用運行狀態關聯。應用正常關閉時,ZooKeeper客戶端檢測到連接中斷,自動刪除臨時節點。dubbo.registry.retry.period配置項控制超時時間。

然而,Dubbo應用關閉并不主動調用注銷方法刪除節點,而是依賴ZooKeeper的會話超時機制。因此,在ZooKeeper客戶端檢測到連接中斷并刪除臨時節點前,節點信息依然存在。

ZooKeeper重啟會從磁盤快照恢復數據。如果Dubbo應用關閉前,ZooKeeper客戶端已成功創建并持久化服務節點,則即使應用關閉,ZooKeeper重啟后仍可讀取該信息。

此外,ls /dubbo命令讀取ZooKeeper服務器內存緩存數據。即使臨時節點失效,由于ZooKeeper的緩存機制,信息可能仍存在于內存中,導致命令顯示舊信息。只有在ZooKeeper客戶端會話超時并從內存緩存中刪除信息后,該信息才會完全消失。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享