AgileConfig-輕量級配置中心 1.1.0 發(fā)布,支持應(yīng)用間配置繼承

AgileConfig輕量級配置中心自第一個版本發(fā)布不知不覺已經(jīng)半年了。在并未進行什么推廣的情況下收到了250個star,對我有很大的鼓舞,并且也有不少同學(xué)試用,并且給出了寶貴的意見,非常感謝他們。其中有一些意見非常好,但是一直沒有開發(fā)。主要是一來下半年比較忙(懶),二來我不想把AgileConfig搞的過于復(fù)雜。但其中有個需求被很多同學(xué)提及過,就是希望能支持應(yīng)用間的繼承(關(guān)聯(lián)),類似Apollo的公共namespace的概念。比如微服務(wù)應(yīng)用之間有不少公共配置項,可以配置在一個應(yīng)用內(nèi),然后其他應(yīng)用繼承它,這樣每個應(yīng)用就不用重復(fù)的配置公共配置。我思考了一下,這個配置確實是個非常有用的功能,于是花了點時間實現(xiàn)了它。
Github地址:https://github.com/kklldog/AgileConfig 求star 。
下面的示例簡單演示下如何使用AgileConfig讀取配置并且使用繼承功能

使用docker啟動一個AgileConfig實例

sudo docker run --name agile_config -e adminConsole=true -e db:provider=sqlserver -e db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." -p 5000:5000 kklldog/agile_config:latest

使用docker命令運行一個AgileConfig實例,這是最簡單的方法。當然你也可以拉源碼下來編譯發(fā)布使用IIS來運行它。
配置環(huán)境變量:
adminConsole=true 開啟控制臺功能
db:provider=sqlserver 數(shù)據(jù)庫為SqlServer
db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." 配置數(shù)據(jù)庫連接
-p 5000:5000 容器的5000口映射本地的5000口

配置AgileConfig

第一次運行需要配置管理密碼
[圖片上傳失敗...(image-812fff-1607959593040)]
密碼配置完成后重新登錄進系統(tǒng),開始配置節(jié)點

D66God.png

在設(shè)計的時候節(jié)點跟控制臺是分開的,但是為了部署簡單最后節(jié)點跟控制臺被實現(xiàn)在一起了。所以采用單節(jié)點部署的時候,該實例既是節(jié)點又是控制臺,所以也需要把本節(jié)點的地址加入到節(jié)點列表里,以便控制臺能管理到。

添加應(yīng)用

AgileConfig的初始化完成了,現(xiàn)在我們開始添加應(yīng)用。
添加“公共應(yīng)用”

D66oTJ.png

添加應(yīng)用名稱,應(yīng)用id,勾選“可被繼承”。點擊確定完成公共的創(chuàng)建。系統(tǒng)只支持一層的繼承,可被繼承的應(yīng)用不能再繼承其它應(yīng)用。
創(chuàng)建完成后為公共應(yīng)用添加配置項
D66jOO.png

為公共應(yīng)用添加一個配置項:鍵為public_key_01 值為0001 。

添加“私有應(yīng)用”


D6cKts.png

添加一個私有應(yīng)用,不要選“可被繼承”。點擊繼承應(yīng)用欄的加號會彈出可以被的繼承應(yīng)用列表,選擇“公共應(yīng)用”。點擊“確定”完成創(chuàng)建。

為私有應(yīng)用創(chuàng)建配置項

D6c091.png

為私有應(yīng)用添加一個配置項:鍵為private_key_01 值為0002 。

注意:把所有的配置都上線,否則客戶端讀不到配置。

客戶端讀取配置

創(chuàng)建Asp.net Core WebApi項目

我們創(chuàng)建一個WebApi項目做為客戶端來演示如何讀取配置

D6giE4.png

使用nuget引用AgileConfig.Client

Install-Package AgileConfig.Client -Version 1.1.0

集成AgileConfig.Client

使用nuget安裝成功后,切換到Program.cs開始集成AgileConfigClient。

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((ctx,cfg)=> {
                var appId = "private_01";
                var secret = "1";
                var nodes = "http://localhost:5000";
                //new一個client實例
                var configClient = new ConfigClient(appId, secret, nodes);
                //使用AddAgileConfig配置一個新的IConfigurationSource
                cfg.AddAgileConfig(configClient);
            })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

使用IHostBuilder的ConfigureAppConfiguration把我們的ConfigClient注入進去。這里我們的ConfigClient配置的是私有應(yīng)用的id:private_01 。

讀取配置

前期工作都完成了,現(xiàn)在我們可以開始編寫讀取配置的代碼了。
新建一個ReadConfigController:

   [ApiController]
    [Route("[controller]")]
    public class ReadConfigController : ControllerBase
    {
        private readonly IConfiguration _IConfiguration;
        public ReadConfigController(IConfiguration configuration)
        {
            _IConfiguration = configuration;
        }

        [HttpGet]
        public String Get()
        {
            var publicConfig = _IConfiguration["public_key_01"];
            var privateConfig = _IConfiguration["private_key_01"];


            return $"publicConfig:{publicConfig} , privateConfig:{privateConfig}";
        }
    }

通過構(gòu)造函數(shù)注入IConfiguration,然后通過它直接讀取公共配置,私有配置,并且直接把字符串返回回去。

注意修改一下客戶端程序的啟動端口,默認5000跟上面的AgileConfig實例占用的端口沖突。

運行一下

運行客戶端項目,然后在瀏覽器里輸入http://localhost:51605/readconfig

D6WrPH.png

可以看到我們的公共配置跟私有配置都準確的讀取到了。

總結(jié)

通過以上一個簡單的示例,演示了如何使用AgileConfig讀取配置以及如何在應(yīng)用間繼承配置。以上示例并未展示所有內(nèi)容,使用繼承的時候需要注意一下幾點:

  1. 當私有應(yīng)用的配置跟被繼承應(yīng)用重復(fù)時,私有應(yīng)用的配置會覆蓋被繼承應(yīng)用的配置
  2. 如果一個應(yīng)用被標記為"可被繼承"后,這個應(yīng)用自己不能繼續(xù)繼承其它應(yīng)用
  3. 一個私有應(yīng)用可以繼承多個“可被繼承”的應(yīng)用,如果多個繼承的應(yīng)用間出現(xiàn)重復(fù)的配置,那么將按照繼承的順序,后面的應(yīng)用會覆蓋前面的應(yīng)用。

如果喜歡這個項目的,請給我star吧。謝謝。
Github地址:https://github.com/kklldog/AgileConfig

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容