基於ZooKeeper實現簡單的配置中心
阿新 • • 發佈:2018-12-11
ZooKeeper節點的型別分為以下幾類:
1. 持久節點:節點建立後就一直存在,直到有刪除操作來主動刪除該節點
2. 臨時節點:臨時節點的生命週期和建立該節點的客戶端會話繫結,即如果客戶端會話失效(客戶端宕機或下線),這個節點自動刪除
3. 時序節點:建立節點是可以設定這個屬性,ZooKeeper會自動為給定的節點加上一個數字字尾,作為新的節點名。數字字尾的範圍是整型的最大值
4. 臨時性時序節點:同時具備臨時節點與時序節點的特性,主要用於分散式鎖的實現
配置中心使用ZooKeeper的持久節點的特性,將配置資訊寫入到持久節點。客戶端啟動時,從ZooKeeper讀取配置資訊,進而初始化內部資源,達到配置統一管理的目的。再結合ZooKeeper的Watch特性,配置資訊變化實時推送到客戶端,即時生效,無需重啟客戶端,達到配置熱更新的效果。
基於ZooKeeper實現簡易配置中心的例項程式碼如下:
往服務端寫入配置,程式碼如下:
客戶端從ZooKeeper查詢配置,程式碼如下:
以上就是簡單的配置中心實現樣例。但是還存在以下改進空間:
1.沒有對資料變化進行監聽,需要在資料變化時實時獲取新的配置。(注:Zookeeper的API中的watch只能消費一次,需迴圈設定監聽)
2.可以使用ZKClient或者Curator等ZooKeeper客戶端工具,解決了非常底層的細節開發工作,包括連線重連、反覆註冊Watcher和NodeExistsException異常等
歡迎關注我的微信公眾號(Sunnick,請掃碼關注),隨時留言交流~