擼了一個簡易的配置中心,順帶整合到了SpringCloud

大家好,我是三友~~
最近突然心血來潮(就是閑的)就想著擼一個簡單的配置中心,順便也照葫蘆畫瓢給整合到SpringCloud 。
本文大綱

擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
配置中心的概述隨著歷史的車輪不斷的前進,技術不斷的進步,單體架構的系統都逐漸轉向微服務架構 。雖然微服務架構有諸多優點,但是隨著越來越多的服務實例的數量 , 配置的不斷增多,傳統的配置文件方式不能再繼續適用業務的發展,所以急需一種可以統一管理配置文件應用 , 在此之下配置中心就誕生了 。
所以配置中心就是用來統一管理各種服務配置的一個組件,本質上就是一個web應用 。
配置中心的核心功能一個配置中心的核心功能其實主要包括兩個:
  • 配置的存取
  • 配置變更的通知
配置的存取是配置中心不可缺失的功能,配置中心需要能夠將配置進行保存,存在磁盤文件也好 , 又或是數據庫也罷,總之需要持久化,同時配置中心也得提供配置查詢的功能 。
配置變化的通知也是一個很重要的功能,一旦配置中心的配置有變動的話,那么使用到這個配置的客戶端就需要知道這個配置有變動,從而可以做到相應的變動的操作 。
手擼一個簡易的配置中心上文分析了一個配置中心的核心功能,接下來就實現這兩個核心的功能 。
一、文件工程整體分析
擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
文件工程整體分為客戶端與服務端
  • 服務端:單獨部署的一個web應用,端口是8888 , 提供了對于配置增刪改查的http接口
  • 客戶端(SDK):業務系統需要引用對應的依賴,封裝了跟服務端交互的代碼
二、服務端實現詳解1、配置文件的數據存儲模型ConfigFile在配置中心存儲配置的時候,需要指明以下信息
public class ConfigFile {    private String fileId;    private String name;    private String extension;    private String content;    private Long lastUpdateTimestamp;}
  • fileId: 文件的唯一id,由配置中心服務端在新增配置文件存儲的時候自動生成 , 全局唯一
  • name: 就是文件的名字,沒有什么要求 , 見名知意就行
  • extension: 文件后綴名,指的是該配置是什么類型的文件,比如是properties、yml等
  • content: 就是配置文件的內容,不同的后綴名有不同的格式要求
  • lastUpdateTimestamp: 上一次文件更新的時間戳 。當文件存儲或者更新的時候,需要更新時間戳 , 這個字段是用來判斷文件是否有改動
2、文件存儲層ConfigFileStorage對于文件存儲層,我提供了一個ConfigFileStorage接口 , 
public interface ConfigFileStorage {    void save(ConfigFile configFile);    void update(ConfigFile configFile);    void delete(String fileId);    ConfigFile selectByFileId(String fileId);    List<ConfigFile> selectAll();}這個接口提供了對于配置存儲的crud操作,目前我已經實現了基于內存和磁盤文件的存儲的代碼

擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
可以在項目啟動的時候,在配置文件指定是基于磁盤文件存儲還是基于內存存儲,默認是基于磁盤文件存儲 。

擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
當然,如果想把配置信息存儲到數據庫,只要新增一個存儲到數據的實現就行 。
3、ConfigControllerConfigController提供了對于配置文件的crud的http接口

擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
ConfigController是通過調用ConfigManager來完成配置文件的crud
4、ConfigManager
擼了一個簡易的配置中心,順帶整合到了SpringCloud

文章插圖
其實就是一個service層,就是簡單的參數封裝,最終是調用ConfigFileStorage存儲層的實現來完成配置的存儲功能 。
這樣配置中心的配的存取的功能就實現了 。
所以 , 服務端還是比較簡單的 。其實就是跟平時寫的業務系統的crud沒什么區別,就是將數據庫存儲替換成了磁盤文件的存儲 。

推薦閱讀