.NET轻量级配置中心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/
image.png界面還是簡約美觀的,第一次登錄需要初始化管理員密碼,然后登錄進入系統
image.png通過主界面我們看到了下面這個幾個菜單
節點:AgileConfig支持多節點部署,所有的節點都是平行的。為了簡化部署,AgileConfig并沒有單獨的控制臺程序,請直接使用任意一個節點作為控制臺。
image.png應用:AgileConfig支持多應用程序接入。需要為每個應用程序配置名稱、ID、秘鑰等信息。每個應用可以設置是否可以被繼承,可以被繼承的應用類似apollo的公共 namespace 的概念。公共的配置可以提取到可繼承應用中,其它應用只要繼承它就可以獲得所有配置。如果子應用跟被繼承應用之間的配置鍵發生重復,子應用的配置會覆蓋被繼承的應用的配置。子應用可以繼承多個應用,如果多個應用之間發生重復鍵,按照繼承的順序,后繼承的應用的配置覆蓋前面的應用。
image.png創建好應用后我們可以點擊列表的配置該應用的配置項。
image.png新添加的配置并不會被客戶端感知到,需要手工點擊“上線”才會推送給客戶端。
image.png已上線的配置如果發生修改、刪除、回滾操作,會實時推送給客戶端。版本歷史記錄了配置的歷史信息,可以回滾至任意版本。
image.png客戶端:可以查看已經連接的客戶端
日志:記錄一些關鍵信息的日志
創建客戶端
通過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配置一個新的IConfigurationSourceconfig.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中獲取配置
image.png增加一個接口獲取配置信息
????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;
在程序不關閉情況下修改配置,測試一下配置是否更新
image.png請求接口重新獲取最近配置(不是實時更新,需要等待一小會,但是滿足我們的實際需求)
參考資料
開發作者的文章:https://www.cnblogs.com/kklldog/p/agile-config.html
GitHub中文文檔:https://github.com/kklldog/AgileConfig/blob/master/README_CN.md
總結
以上是生活随笔為你收集整理的.NET轻量级配置中心AgileConfig的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#获取摄像头拍照显示图像
- 下一篇: .NET Core HttpClient