NetCore 輕量級配置中心 AgileConfig
基於 NetCore 開發的輕量級配置中心,部署簡單、配置簡單,使用簡單,可以根據個人或者公司需求採用。
-
部署簡答,最少只需要一個數據節點,支持 docker 部署
-
支持多節點分佈式部署來保證高可用
-
配置支持按照應用隔離,應用內配置支持分組隔離
-
使用長鏈接技術,配置信息實時推送到客戶端
-
支持 IConfiguration、IOptions 模式讀取配置,原程序幾乎不用改造
-
配置修改支持版本記錄,隨時回滾配置
-
所有所有節點都故障,客戶端支持從本地緩存讀取配置
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
adminConsole 配置程序是否爲管理控制檯。如果爲 true 則啓用控制檯功能,訪問該實例會出現管理界面。
db:provider 配置程序的數據庫類型。目前程序支持:sqlite,mysql,sqlserver 三種數據庫。
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