1. 程式人生 > 實用技巧 >AgileConfig-輕量級配置中心 1.1.0 釋出,支援應用間配置繼承

AgileConfig-輕量級配置中心 1.1.0 釋出,支援應用間配置繼承

AgileConfig輕量級配置中心自第一個版本釋出不知不覺已經半年了。在並未進行什麼推廣的情況下收到了250個star,對我有很大的鼓舞,並且也有不少同學試用,並且給出了寶貴的意見,非常感謝他們。其中有一些意見非常好,但是一直沒有開發。主要是一來下半年比較忙(懶),二來我不想把AgileConfig搞的過於複雜。但其中有個需求被很多同學提及過,就是希望能支援應用間的繼承(關聯),類似Apollo的公共namespace的概念。比如微服務應用之間有不少公共配置項,可以配置在一個應用內,然後其他應用繼承它,這樣每個應用就不用重複的配置公共配置。我思考了一下,這個配置確實是個非常有用的功能,於是花了點時間實現了它。
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例項,這是最簡單的方法。當然你也可以拉原始碼下來編譯釋出使用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

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

密碼配置完成後重新登入進系統,開始配置節點

在設計的時候節點跟控制檯是分開的,但是為了部署簡單最後節點跟控制檯被實現在一起了。所以採用單節點部署的時候,該例項既是節點又是控制檯,所以也需要把本節點的地址加入到節點列表裡,以便控制檯能管理到。

新增應用

AgileConfig的初始化完成了,現在我們開始新增應用。
新增“公共應用”

新增應用名稱,應用id,勾選“可被繼承”。點選確定完成公共的建立。系統只支援一層的繼承,可被繼承的應用不能再繼承其它應用。
建立完成後為公共應用新增配置項

為公共應用新增一個配置項:鍵為public_key_01 值為0001 。

新增“私有應用”

新增一個私有應用,不要選“可被繼承”。點選繼承應用欄的加號會彈出可以被的繼承應用列表,選擇“公共應用”。點選“確定”完成建立。

為私有應用建立配置項

為私有應用新增一個配置項:鍵為private_key_01 值為0002 。

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

客戶端讀取配置

建立Asp.net Core WebApi專案

我們建立一個WebApi專案做為客戶端來演示如何讀取配置

使用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配置的是私有應用的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例項佔用的埠衝突。

執行一下

執行客戶端專案,然後在瀏覽器裡輸入http://localhost:51605/readconfig

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

總結

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

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

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

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