.NET轻量级配置中心AgileConfig
描述
基于NetCore開發(fā)的輕量級配置中心,部署簡單、配置簡單,使用簡單,可以根據(jù)個人或者公司需求采用。
部署簡答,最少只需要一個數(shù)據(jù)節(jié)點,支持docker部署
支持多節(jié)點分布式部署來保證高可用
配置支持按照應(yīng)用隔離,應(yīng)用內(nèi)配置支持分組隔離
使用長鏈接技術(shù),配置信息實時推送到客戶端
支持IConfiguration、IOptions模式讀取配置,原程序幾乎不用改造
配置修改支持版本記錄,隨時回滾配置
所有所有節(jié)點都故障,客戶端支持從本地緩存讀取配置
GitHub地址:https://github.com/kklldog/AgileConfig ?可以給這個大佬點個star
如果使用apollo進行部署做配置中心,對于部分公司來講,過于笨重,所以我個人還是挺推薦這個的,再次感謝kklldog大佬的開源項目。
部署
通過docker部署,目前支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五種數(shù)據(jù)庫。本次示例使用輕量級的sqlite作為數(shù)據(jù)存儲
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則啟用控制臺功能,訪問該實例會出現(xiàn)管理界面。
db:provider 配置程序的數(shù)據(jù)庫類型。目前程序支持:sqlite,mysql,sqlserver 三種數(shù)據(jù)庫。
db:conn 配置數(shù)據(jù)庫連接串
進入系統(tǒng)
通過瀏覽器訪問我們地址:http://localhost:8011/
image.png界面還是簡約美觀的,第一次登錄需要初始化管理員密碼,然后登錄進入系統(tǒng)
image.png通過主界面我們看到了下面這個幾個菜單
節(jié)點:AgileConfig支持多節(jié)點部署,所有的節(jié)點都是平行的。為了簡化部署,AgileConfig并沒有單獨的控制臺程序,請直接使用任意一個節(jié)點作為控制臺。
image.png應(yīng)用:AgileConfig支持多應(yīng)用程序接入。需要為每個應(yīng)用程序配置名稱、ID、秘鑰等信息。每個應(yīng)用可以設(shè)置是否可以被繼承,可以被繼承的應(yīng)用類似apollo的公共 namespace 的概念。公共的配置可以提取到可繼承應(yīng)用中,其它應(yīng)用只要繼承它就可以獲得所有配置。如果子應(yīng)用跟被繼承應(yīng)用之間的配置鍵發(fā)生重復(fù),子應(yīng)用的配置會覆蓋被繼承的應(yīng)用的配置。子應(yīng)用可以繼承多個應(yīng)用,如果多個應(yīng)用之間發(fā)生重復(fù)鍵,按照繼承的順序,后繼承的應(yīng)用的配置覆蓋前面的應(yīng)用。
image.png創(chuàng)建好應(yīng)用后我們可以點擊列表的配置該應(yīng)用的配置項。
image.png新添加的配置并不會被客戶端感知到,需要手工點擊“上線”才會推送給客戶端。
image.png已上線的配置如果發(fā)生修改、刪除、回滾操作,會實時推送給客戶端。版本歷史記錄了配置的歷史信息,可以回滾至任意版本。
image.png客戶端:可以查看已經(jīng)連接的客戶端
日志:記錄一些關(guān)鍵信息的日志
創(chuàng)建客戶端
通過VS2019創(chuàng)建一個.Net5的WebAPI應(yīng)用程序,安裝組件
??<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的相關(guān)信息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>///?此事件會在配置項目發(fā)生新增、修改、刪除的時候觸發(fā)///?</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"?//多個節(jié)點使用逗號分隔}讀取配置
AgileConfig支持asp.net core 標準的IConfiguration,跟IOptions模式讀取配置。還支持直接通過AgileConfigClient實例直接讀取。本文直接注入IConfiguration來獲取剛才我們配置的數(shù)據(jù)庫連接信息。
在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;
在程序不關(guān)閉情況下修改配置,測試一下配置是否更新
image.png請求接口重新獲取最近配置(不是實時更新,需要等待一小會,但是滿足我們的實際需求)
參考資料
開發(fā)作者的文章:https://www.cnblogs.com/kklldog/p/agile-config.html
GitHub中文文檔:https://github.com/kklldog/AgileConfig/blob/master/README_CN.md
總結(jié)
以上是生活随笔為你收集整理的.NET轻量级配置中心AgileConfig的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#获取摄像头拍照显示图像
- 下一篇: 一探即将到来的 C# 10