AgileConfig-輕量級配置中心 1.1.0 發佈,支持應用間配置繼承

AgileConfig輕量級配置中心自第一個版本發佈不知不覺已經半年了。在並未進行什麼推廣的情況下收到了250個star,對我有很大的鼓舞,並且也有不少同學試用,並且給出了寶貴的意見,非常感謝他們。其中有一些意見非常好,但是一直沒有開發。主要是一來下半年比較忙(懶),二來我不想把AgileConfig搞的過於複雜。但其中有個需求被很多同學提及過,就是希望能支持應用間的繼承(關聯),類似Apollo的公共namespace的概念。比如微服務應用之間有不少公共配置項,可以配置在一個應用內,然後其他應用繼承它,這樣每個應用就不用重複的配置公共配置。我思考了一下,這個配置確實是個非常有用的功能,於是花了點時間實現了它。
Github地址://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實例,這是最簡單的方法。當然你也可以拉源碼下來編譯發佈使用IIS來運行它。
配置環境變量:
adminConsole=true 開啟控制台功能
db:provider=sqlserver 數據庫為SqlServer
db:conn=”Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =.” 配置數據庫連接
-p 5000:5000 容器的5000口映射本地的5000口

配置AgileConfig

第一次運行需要配置管理密碼

密碼配置完成後重新登錄進系統,開始配置節點
D66God.png
在設計的時候節點跟控制台是分開的,但是為了部署簡單最後節點跟控制台被實現在一起了。所以採用單節點部署的時候,該實例既是節點又是控制台,所以也需要把本節點的地址加入到節點列表裡,以便控制台能管理到。

添加應用

AgileConfig的初始化完成了,現在我們開始添加應用。
添加「公共應用」
D66oTJ.png
添加應用名稱,應用id,勾選「可被繼承」。點擊確定完成公共的創建。系統只支持一層的繼承,可被繼承的應用不能再繼承其它應用。
創建完成後為公共應用添加配置項
D66jOO.png
為公共應用添加一個配置項:鍵為public_key_01 值為0001 。

添加「私有應用」
D6cKts.png
添加一個私有應用,不要選「可被繼承」。點擊繼承應用欄的加號會彈出可以被的繼承應用列表,選擇「公共應用」。點擊「確定」完成創建。

為私有應用創建配置項
D6c091.png
為私有應用添加一個配置項:鍵為private_key_01 值為0002 。

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

客戶端讀取配置

創建Asp.net Core WebApi項目

我們創建一個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 = "//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配置的是私有應用的id:private_01 。

讀取配置

前期工作都完成了,現在我們可以開始編寫讀取配置的代碼了。
新建一個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}";
        }
    }

通過構造函數注入IConfiguration,然後通過它直接讀取公共配置,私有配置,並且直接把字符串返回回去。

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

運行一下

運行客戶端項目,然後在瀏覽器里輸入//localhost:51605/readconfig
D6WrPH.png
可以看到我們的公共配置跟私有配置都準確的讀取到了。

總結

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

  1. 當私有應用的配置跟被繼承應用重複時,私有應用的配置會覆蓋被繼承應用的配置
  2. 如果一個應用被標記為”可被繼承”後,這個應用自己不能繼續繼承其它應用
  3. 一個私有應用可以繼承多個「可被繼承」的應用,如果多個繼承的應用間出現重複的配置,那麼將按照繼承的順序,後面的應用會覆蓋前面的應用。

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

關注我的公眾號一起玩轉技術