AgileConfig

这是一个基于.net core开发的轻量级配置中心。

  1. 部署简单,最少只需要一个数据节点,支持docker部署
  2. 支持多节点分布式部署来保证高可用
  3. 应用支持继承,可以把公共配置提取到一个应用然后其它应用继承它
  4. 配置支持按应用隔离,应用内配置支持分组隔离
  5. 使用长连接技术,配置信息实时推送至客户端
  6. 支持IConfiguration,IOptions模式读取配置,原程序几乎可以不用改造
  7. 配置修改支持版本记录,随时回滚配置
  8. 如果所有节点都故障,客户端支持从本地缓存读取配置

客户端项目AgileConfig_Client
示例项目AgileConfigMVCSample

架构

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

客户端

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

节点、管理程序

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

数据库

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

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

部署服务端

初始化数据库

用户只需要手工建一个空库,所有的表在第一次启动的时候都会自动生成。目前支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。
provider对照:
sqlserver = SqlServer
mysql = MySql
sqlite = Sqlite
npgsql = PostgreSql
oracle = Oracle

使用服务端

运行服务端

sudo docker run --name agile_config -e adminConsole=true -e db:provider=sqlite -e db:conn="Data Source=agile_config.db" -p 5000:5000 kklldog/agile_config:latest

通过docker建立一个agile_config实例,其中有3个环境变量需要配置:

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

初始化管理员密码

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

节点

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

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

应用

AgileConfig支持多应用程序接入。需要为每个应用程序配置名称、ID、秘钥等信息。
每个应用可以设置是否可以被继承,可以被继承的应用类似apollo的公共 namespace 的概念。公共的配置可以提取到可继承应用中,其它应用只要继承它就可以获得所有配置。
如果子应用跟被继承应用之间的配置键发生重复,子应用的配置会覆盖被继承的应用的配置。子应用可以继承多个应用,如果多个应用之间发生重复键,按照继承的顺序,后继承的应用的配置覆盖前面的应用。

配置项

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

客户端

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

系统日志

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

使用客户端

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

使用nuget安装客户端类库

Install-Package AgileConfig.Client

初始化客户端

以asp.net core mvc项目为例:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*",//agile_config"AgileConfig": {"appId": "app","secret": "xxx","nodes": "http://localhost:5000,http://localhost:5001"//多个节点使用逗号分隔}
}
       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>();});

读取配置

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

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;private readonly IConfiguration _IConfiguration;private readonly IOptions<DbConfigOptions> _dbOptions;public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptions<DbConfigOptions> dbOptions){_logger = logger;_IConfiguration = configuration;_dbOptions = dbOptions;}public IActionResult Index(){return View();}/// <summary>/// 使用IConfiguration读取配置/// </summary>/// <returns></returns>public IActionResult ByIConfiguration(){var userId = _IConfiguration["userId"];var dbConn = _IConfiguration["db:connection"];ViewBag.userId = userId;ViewBag.dbConn = dbConn;return View();}/// <summary>/// 直接使用ConfigClient的实例读取配置/// </summary>/// <returns></returns>public IActionResult ByInstance(){var userId = Program.ConfigClient["userId"];var dbConn = Program.ConfigClient["db:connection"];ViewBag.userId = userId;ViewBag.dbConn = dbConn;return View("ByIConfiguration");}/// <summary>/// 使用Options模式读取配置/// </summary>/// <returns></returns>public IActionResult ByOptions(){var dbConn = _dbOptions.Value.connection;ViewBag.dbConn = dbConn;return View("ByIConfiguration");}}

联系我

有什么问题可以mail我:minj.zhou@gmail.com
也可以加qq群:1022985150

AgileConfig-.net core 轻量级配置中心相关推荐

  1. .NET轻量级配置中心AgileConfig

    描述 基于NetCore开发的轻量级配置中心,部署简单.配置简单,使用简单,可以根据个人或者公司需求采用. 部署简答,最少只需要一个数据节点,支持docker部署 支持多节点分布式部署来保证高可用 配 ...

  2. AgileConfig - 轻量级配置中心1.2.0发布,全新的UI

    AgileConfig自发布以来有个"大问题"-UI太丑.因为当初这个项目是给自己用的,连UI界面都没有,全靠手动在数据库里改配置.后来匆匆忙忙使用bootstrap3简单的码了一 ...

  3. 造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

    微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移.玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的组件可以选,比如spring-cloud-config,apoll,discon ...

  4. AgileConfig 一个轻量级配置中心

    介绍 AgileConfig 是一个基于.net core 开发的轻量级配置中心,秉承轻量化的特点,部署简单.配置简单.使用简单,提取了必要的一些功能,并没有像 Apollo 那样复杂且庞大.但是它的 ...

  5. .NET Core Apollo 配置中心

    Apollo Quick Start Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等 ...

  6. AgileConfig轻量级配置中心1.4.0发布,重构了发布功能

    加入 NCC 先说一个事,AgileConfig 在 7 月底终于通过了 NCC 社区的审核,正式成为了 NCC 大家庭的一员.这对 AgileConfig 来说是一个里程碑,希望加入 NCC 后能更 ...

  7. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...

  8. .NET Core with 微服务 - Consul 配置中心

    上一次我们介绍了Elastic APM组件.这一次我们继续介绍微服务相关组件配置中心的使用方法.本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来.因为 ...

  9. AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承

    AgileConfig轻量级配置中心自第一个版本发布不知不觉已经半年了.在并未进行什么推广的情况下收到了250个star,对我有很大的鼓舞,并且也有不少同学试用,并且给出了宝贵的意见,非常感谢他们.其 ...

最新文章

  1. XMOVE3.0手持终端——软件介绍(五):在2KB内存的单片机上实现的T9中文输入法
  2. PIOLINK负载均衡高校应用
  3. egg 编码规范_Egg 框架简述 (仅学习)
  4. 把散乱的SQL赶出程序代码中
  5. 版本控制git之一-仓库管理
  6. gmail如何设置邮箱别名
  7. mysql phpwind_PhpWind教程:快速修复损坏的MySQL数据库
  8. kubectl config 命令
  9. 先验分布、后验分布、共轭先验分布
  10. Rmarkdown直觉以及常用katex语法
  11. python中算法定义_Python入门进阶笔记--04Python中表示“组”的概念与定义
  12. UnixLinux 读书摘抄(简介)
  13. 使用Jrtplib实现RTP视频数据发送接收
  14. 《Journal of Renewable and Sustainable Energy》期刊介绍(SCI 4区)
  15. access前端连接mysql_用javascript连接access数据库的方法
  16. 豆豆趣事[2011年03月]
  17. 海湾gst5000协议号_海湾GST5000/GST9000主机电源盒/DC-DC火灾报警控制器电源盒
  18. Java操作PDF大全
  19. 文章被其他网站盗用的经历
  20. 字节跳动数据分析岗笔试分享笔试形式和内容

热门文章

  1. Matlab处理气象数据(四)观测数据的预处理和计算
  2. 笼罩在孙子和《孙子兵法》身上的“N”个谜
  3. 对能源消耗的担忧笼罩着苹果爱尔兰数据中心
  4. android 家长管理,基于Android平台的家长管控系统
  5. 天赋和努力,谁都有追逐梦想的权利!
  6. 万物皆可 Hook,探究 Xposed 框架 Hook 原理
  7. EPLAN教程 | 易盼软件钻孔排列样式
  8. 简单认识一下mbedTLS
  9. 鸿蒙智能家居市场,华为鸿蒙新系统,意在智能家居?
  10. AMI主板BIOS菜单图文讲解设置!