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