AgileConfig 轻量级配置中心开源项目

我要开发同款
匿名用户2020年10月23日
51阅读
开发技术C#HTML/CSS
所属分类常用工具包、程序开发
授权协议MIT

作品详情

AgileConfig是一个基于.netcore开发的轻量级配置中心。

部署简单,最少只需要一个数据节点,支持docker部署支持多节点分布式部署来保证高可用配置支持按应用隔离,应用内配置支持分组隔离使用长连接技术,配置信息实时推送至客户端支持IConfiguration,IOptions模式读取配置,原程序几乎可以不用改造配置修改支持版本记录,随时回滚配置如果所有节点都故障,客户端支持从本地缓存读取配置服务端项目AgileConfig

客户端项目AgileConfig_Client

示例项目AgileConfigMVCSample

架构

AgileConfig的架构比较简单,主要是分3块:

客户端客户端程序是使用netstandard2.0开发的一个类库,方便.netcore程序接入,nuget搜agileconfig.client就可以安装。可以在启动客户端的时候配置多个节点的地址,客户端会随机挑选一个进行连接,连接成功后会维持一个websocket长连接。如果连接的节点发生故障导致连接中断,客户端会继续随机一个节点进行连接,直到连接成功。

节点、管理程序节点是使用asp.netcore开发的一个服务。为了部署简单,直接把管理程序跟节点服务合二为一了。任何一个节点都可以在启动的时候配置环境变量开启管理程序功能。

数据库使用数据库来存储数据,目前支持Sqlserver,Mysql,Sqlite,PostgreSql,Oracle五种数据库。最新版本已经切换为Freesql为数据访问组件。Freesql对多数据库的支持更加强劲,特别是对国产数据库的支持。但是因为没有国产数据库的测试环境,本项目并未支持,如果有需要我可是开分支尝试支持,但是测试工作就要靠用户啦。

注意:如果使用<=1.0.4之前版本的用户请不要更新,因为EFCore跟Freesql自动建的库可能存在稍许差异,保险起见不要更新吧。

部署服务端初始化数据库用户只需要手工建一个空库,所有的表在第一次启动的时候都会自动生成。目前支持sqlserver,mysql,sqlite,PostgreSql,Oracle五种数据库。provider对照:sqlserver=SqlServermysql=MySqlsqlite=Sqlitenpgsql=PostgreSqloracle=Oracle

使用服务端运行服务端 sudodockerrun--nameagile_config-eadminConsole=true-edb:provider=sqlite-edb:conn="DataSource=agile_config.db"-p5000:5000kklldog/agile_config:latest通过docker建立一个agile_config实例,其中有3个环境变量需要配置:

adminConsole配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。db:provider配置程序的数据库类型。目前程序支持:sqlite,mysql,sqlserver,npgsql,oracle五种数据库。db:conn配置数据库连接串

初始化管理员密码第一次运行程序需要初始化管理员密码

节点AgileConfig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileConfig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。当环境变量adminConsole=true时,该节点同时兼备数据节点跟控制台功能。为了控制台能够管理节点,所以需要在控制台配置节点的信息。

注意:即使是作为控制台的数据节点同样需要添加到管理程序,以便管理它。

应用AgileConfig支持多应用程序接入。需要为每个应用程序配置名称、ID、秘钥等信息。

配置项配置完应用信息后可以为每个应用配置配置项。配置项支持分组。新添加的配置并不会被客户端感知到,需要手工点击“上线”才会推送给客户端。已上线的配置如果发生修改、删除、回滚操作,会实时推送给客户端。版本历史记录了配置的历史信息,可以回滚至任意版本。

客户端控制台可以查看已连接的客户端。

系统日志系统日志记录了AgileConfig生产中的一些关键信息。

使用客户端客户端AgileConfig_Client是使用.netcorestandard2.0编写的一个类库,已发布到nuget,方便用户集成。

使用nuget安装客户端类库Install-PackageAgileConfig.Client初始化客户端

以asp.netcoremvc项目为例:

{"Logging":{"LogLevel":{"Default":"Information","Microsoft":"Warning","Microsoft.Hosting.Lifetime":"Information"}},"AllowedHosts":"*",//agile_config"AgileConfig":{"appId":"app","secret":"xxx","nodes":"https://localhost:5000,https://localhost:5001"//多个节点使用逗号分隔}}publicstaticIHostBuilderCreateHostBuilder(string[]args)=>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context,config)=>{//读取本地配置varlocalconfig=newConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();//从本地配置里读取AgileConfig的相关信息varappId=localconfig["AgileConfig:appId"];varsecret=localconfig["AgileConfig:secret"];varnodes=localconfig["AgileConfig:nodes"];//new一个client实例varconfigClient=newConfigClient(appId,secret,nodes);//使用AddAgileConfig配置一个新的IConfigurationSourceconfig.AddAgileConfig(configClient);//找一个变量挂载client实例,以便其他地方可以直接使用实例访问配置ConfigClient=configClient;//注册配置项修改事件configClient.ConfigChanged+=ConfigClient_ConfigChanged;}).ConfigureWebHostDefaults(webBuilder=>{webBuilder.UseStartup<Startup>();});读取配置

AgileConfig支持asp.netcore标准的IConfiguration,跟IOptions模式读取配置。还支持直接通过AgileConfigClient实例直接读取:

publicclassHomeController:Controller{privatereadonlyILogger<HomeController>_logger;privatereadonlyIConfiguration_IConfiguration;privatereadonlyIOptions<DbConfigOptions>_dbOptions;publicHomeController(ILogger<HomeController>logger,IConfigurationconfiguration,IOptions<DbConfigOptions>dbOptions){_logger=logger;_IConfiguration=configuration;_dbOptions=dbOptions;}publicIActionResultIndex(){returnView();}///<summary>///使用IConfiguration读取配置///</summary>///<returns></returns>publicIActionResultByIConfiguration(){varuserId=_IConfiguration["userId"];vardbConn=_IConfiguration["db:connection"];ViewBag.userId=userId;ViewBag.dbConn=dbConn;returnView();}///<summary>///直接使用ConfigClient的实例读取配置///</summary>///<returns></returns>publicIActionResultByInstance(){varuserId=Program.ConfigClient["userId"];vardbConn=Program.ConfigClient["db:connection"];ViewBag.userId=userId;ViewBag.dbConn=dbConn;returnView("ByIConfiguration");}///<summary>///使用Options模式读取配置///</summary>///<returns></returns>publicIActionResultByOptions(){vardbConn=_dbOptions.Value.connection;ViewBag.dbConn=dbConn;returnView("ByIConfiguration");}}
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论