AgileCofig是一个基于.etcore开发的轻量级配置中心。
部署简单,最少只需要一个数据节点,支持docker部署支持多节点分布式部署来保证高可用配置支持按应用隔离,应用内配置支持分组隔离使用长连接技术,配置信息实时推送至客户端支持ICofiguratio,IOptios模式读取配置,原程序几乎可以不用改造配置修改支持版本记录,随时回滚配置如果所有节点都故障,客户端支持从本地缓存读取配置服务端项目AgileCofig客户端项目AgileCofig_Cliet示例项目AgileCofigMVCSample架构AgileCofig的架构比较简单,主要是分3块:客户端客户端程序是使用etstadard2.0开发的一个类库,方便.etcore程序接入,uget搜agilecofig.cliet就可以安装。可以在启动客户端的时候配置多个节点的地址,客户端会随机挑选一个进行连接,连接成功后会维持一个websocket长连接。如果连接的节点发生故障导致连接中断,客户端会继续随机一个节点进行连接,直到连接成功。节点、管理程序节点是使用asp.etcore开发的一个服务。为了部署简单,直接把管理程序跟节点服务合二为一了。任何一个节点都可以在启动的时候配置环境变量开启管理程序功能。数据库使用数据库来存储数据,目前支持Sqlserver,Mysql,Sqlite,PostgreSql,Oracle五种数据库。最新版本已经切换为Freesql为数据访问组件。Freesql对多数据库的支持更加强劲,特别是对国产数据库的支持。但是因为没有国产数据库的测试环境,本项目并未支持,如果有需要我可是开分支尝试支持,但是测试工作就要靠用户啦。注意:如果使用<=1.0.4之前版本的用户请不要更新,因为EFCore跟Freesql自动建的库可能存在稍许差异,保险起见不要更新吧。
部署服务端初始化数据库用户只需要手工建一个空库,所有的表在第一次启动的时候都会自动生成。目前支持sqlserver,mysql,sqlite,PostgreSql,Oracle五种数据库。provider对照:sqlserver=SqlServermysql=MySqlsqlite=Sqlitepgsql=PostgreSqloracle=Oracle使用服务端运行服务端 sudodockerru--ameagile_cofig-eadmiCosole=true-edb:provider=sqlite-edb:co="DataSource=agile_cofig.db"-p5000:5000kklldog/agile_cofig:latest通过docker建立一个agile_cofig实例,其中有3个环境变量需要配置:admiCosole配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。db:provider配置程序的数据库类型。目前程序支持:sqlite,mysql,sqlserver,pgsql,oracle五种数据库。db:co配置数据库连接串初始化管理员密码第一次运行程序需要初始化管理员密码节点AgileCofig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileCofig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。当环境变量admiCosole=true时,该节点同时兼备数据节点跟控制台功能。为了控制台能够管理节点,所以需要在控制台配置节点的信息。注意:即使是作为控制台的数据节点同样需要添加到管理程序,以便管理它。
应用AgileCofig支持多应用程序接入。需要为每个应用程序配置名称、ID、秘钥等信息。配置项配置完应用信息后可以为每个应用配置配置项。配置项支持分组。新添加的配置并不会被客户端感知到,需要手工点击“上线”才会推送给客户端。已上线的配置如果发生修改、删除、回滚操作,会实时推送给客户端。版本历史记录了配置的历史信息,可以回滚至任意版本。客户端控制台可以查看已连接的客户端。系统日志系统日志记录了AgileCofig生产中的一些关键信息。使用客户端客户端AgileCofig_Cliet是使用.etcorestadard2.0编写的一个类库,已发布到uget,方便用户集成。使用uget安装客户端类库Istall-PackageAgileCofig.Cliet初始化客户端以asp.etcoremvc项目为例:
{"Loggig":{"LogLevel":{"Default":"Iformatio","Microsoft":"Warig","Microsoft.Hostig.Lifetime":"Iformatio"}},"AllowedHosts":"*",//agile_cofig"AgileCofig":{"appId":"app","secret":"xxx","odes":"https://localhost:5000,https://localhost:5001"//多个节点使用逗号分隔}}publicstaticIHostBuilderCreateHostBuilder(strig[]args)=>Host.CreateDefaultBuilder(args).CofigureAppCofiguratio((cotext,cofig)=>{//读取本地配置varlocalcofig=ewCofiguratioBuilder().SetBasePath(Directory.GetCurretDirectory()).AddJsoFile("appsettigs.jso").Build();//从本地配置里读取AgileCofig的相关信息varappId=localcofig["AgileCofig:appId"];varsecret=localcofig["AgileCofig:secret"];varodes=localcofig["AgileCofig:odes"];//ew一个cliet实例varcofigCliet=ewCofigCliet(appId,secret,odes);//使用AddAgileCofig配置一个新的ICofiguratioSourcecofig.AddAgileCofig(cofigCliet);//找一个变量挂载cliet实例,以便其他地方可以直接使用实例访问配置CofigCliet=cofigCliet;//注册配置项修改事件cofigCliet.CofigChaged+=CofigCliet_CofigChaged;}).CofigureWebHostDefaults(webBuilder=>{webBuilder.UseStartup<Startup>();});读取配置AgileCofig支持asp.etcore标准的ICofiguratio,跟IOptios模式读取配置。还支持直接通过AgileCofigCliet实例直接读取:
publicclassHomeCotroller:Cotroller{privatereadolyILogger<HomeCotroller>_logger;privatereadolyICofiguratio_ICofiguratio;privatereadolyIOptios<DbCofigOptios>_dbOptios;publicHomeCotroller(ILogger<HomeCotroller>logger,ICofiguratiocofiguratio,IOptios<DbCofigOptios>dbOptios){_logger=logger;_ICofiguratio=cofiguratio;_dbOptios=dbOptios;}publicIActioResultIdex(){returView();}///<summary>///使用ICofiguratio读取配置///</summary>///<returs></returs>publicIActioResultByICofiguratio(){varuserId=_ICofiguratio["userId"];vardbCo=_ICofiguratio["db:coectio"];ViewBag.userId=userId;ViewBag.dbCo=dbCo;returView();}///<summary>///直接使用CofigCliet的实例读取配置///</summary>///<returs></returs>publicIActioResultByIstace(){varuserId=Program.CofigCliet["userId"];vardbCo=Program.CofigCliet["db:coectio"];ViewBag.userId=userId;ViewBag.dbCo=dbCo;returView("ByICofiguratio");}///<summary>///使用Optios模式读取配置///</summary>///<returs></returs>publicIActioResultByOptios(){vardbCo=_dbOptios.Value.coectio;ViewBag.dbCo=dbCo;returView("ByICofiguratio");}}
评论