NetCore 輕量級配置中心 AgileConfig

基於 NetCore 開發的輕量級配置中心,部署簡單、配置簡單,使用簡單,可以根據個人或者公司需求採用。

GitHub 地址:https://github.com/kklldog/AgileConfig  可以給這個大佬點個 star

如果使用 apollo 進行部署做配置中心,對於部分公司來講,過於笨重,所以我個人還是挺推薦這個的,再次感謝 kklldog 大佬的開源項目。

通過 docker 部署,目前支持 sqlserver,mysql,sqlite, PostgreSql,Oracle 五種數據庫。本次示例使用輕量級的 sqlite 作爲數據存儲

docker run -d --name agile_config -e adminConsole=true -e db:provider=sqlite -e db:conn="Data Source=agile_config.db" -p 8011:5000 kklldog/agile_config:latest
  1. adminConsole 配置程序是否爲管理控制檯。如果爲 true 則啓用控制檯功能,訪問該實例會出現管理界面。

  2. db:provider 配置程序的數據庫類型。目前程序支持:sqlite,mysql,sqlserver 三種數據庫。

  3. db:conn 配置數據庫連接串

通過瀏覽器訪問我們地址:http://localhost:8011/

界面還是簡約美觀的,第一次登錄需要初始化管理員密碼,然後登錄進入系統

通過主界面我們看到了下面這個幾個菜單

節點:AgileConfig 支持多節點部署,所有的節點都是平行的。爲了簡化部署,AgileConfig 並沒有單獨的控制檯程序,請直接使用任意一個節點作爲控制檯。

應用:AgileConfig 支持多應用程序接入。需要爲每個應用程序配置名稱、ID、祕鑰等信息。每個應用可以設置是否可以被繼承,可以被繼承的應用類似 apollo 的公共 namespace 的概念。公共的配置可以提取到可繼承應用中,其它應用只要繼承它就可以獲得所有配置。如果子應用跟被繼承應用之間的配置鍵發生重複,子應用的配置會覆蓋被繼承的應用的配置。子應用可以繼承多個應用,如果多個應用之間發生重複鍵,按照繼承的順序,後繼承的應用的配置覆蓋前面的應用。

創建好應用後我們可以點擊列表的配置該應用的配置項。

新添加的配置並不會被客戶端感知到,需要手工點擊 “上線” 纔會推送給客戶端。

已上線的配置如果發生修改、刪除、回滾操作,會實時推送給客戶端。版本歷史記錄了配置的歷史信息,可以回滾至任意版本。

客戶端:可以查看已經連接的客戶端

日誌:記錄一些關鍵信息的日誌

通過 VS2019 創建一個. Net5 的 WebAPI 應用程序,安裝組件

  <ItemGroup>
    <PackageReference Include="AgileConfig.Client" Version="1.1.8.5" />
  </ItemGroup>

連接我們的配置中心,在 program 中進行配置

    public class Program
    {
        public static IConfigClient ConfigClient;

        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                    //讀取本地配置
                    var localconfig = new ConfigurationBuilder()
                                     .SetBasePath(Directory.GetCurrentDirectory())
                                     .AddJsonFile("appsettings.json").Build();
                    //從本地配置裏讀取AgileConfig的相關信息
                    var appId = localconfig["AgileConfig:appId"];
                    var secret = localconfig["AgileConfig:secret"];
                    var nodes = localconfig["AgileConfig:nodes"];

                    //new一個client實例
                    var configClient = new ConfigClient(appId, secret, nodes);
                    //使用AddAgileConfig配置一個新的IConfigurationSource
                    config.AddAgileConfig(configClient);
                    //找一個變量掛載client實例,以便其他地方可以直接使用實例訪問配置
                    ConfigClient = configClient;
                    //註冊配置項修改事件
                    configClient.ConfigChanged += ConfigClient_ConfigChanged;
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

        /// <summary>
        /// 此事件會在配置項目發生新增、修改、刪除的時候觸發
        /// </summary>
        private static void ConfigClient_ConfigChanged(ConfigChangedArg obj)
        {
            Console.WriteLine($"action:{obj.Action} key:{obj.Key}");

            switch (obj.Action)
            {
                case ActionConst.Add:
                    break;

                case ActionConst.Update:
                    break;

                case ActionConst.Remove:
                    break;

                default:
                    break;
            }
        }
    }

appsettings 添加

  "AgileConfig"{
    "appId""001",
    "secret""454551215781234",//密鑰
    "nodes""http://localhost:8011" //多個節點使用逗號分隔
  }

AgileConfig 支持 asp.net core 標準的 IConfiguration,跟 IOptions 模式讀取配置。還支持直接通過 AgileConfigClient 實例直接讀取。本文直接注入 IConfiguration 來獲取剛纔我們配置的數據庫連接信息。

在 startup 中獲取配置

增加一個接口獲取配置信息

    private readonly IConfiguration _configuration;

    public HomeController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpGet]
    public string Get()
    {
        return _configuration["db:ConnectionString"];
    }

訪問接口輸出配置

Server=localhost;Database=test;Port=3306;charset=utf8;uid=root;pwd=123456;

在程序不關閉情況下修改配置,測試一下配置是否更新

請求接口重新獲取最近配置 (不是實時更新,需要等待一小會,但是滿足我們的實際需求)

開發作者的文章:https://www.cnblogs.com/kklldog/p/agile-config.html

GitHub 中文文檔:https://github.com/kklldog/AgileConfig/blob/master/README_CN.md

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/LC-U_16ntmt3eWwlQlU-Ew