ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

『AgileConfig』.NET轻量级配置中心AgileConfig

2021-06-06 13:33:03  阅读:145  来源: 互联网

标签:配置 节点 应用 NET config AgileConfig 轻量级 客户端


描述

基于NetCore开发的轻量级配置中心,部署简单、配置简单,使用简单,可以根据个人或者公司需求采用。

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

GitHub地址:https://github.com/kklldog/AgileConfig 可以给这个大佬点个star

架构

在这里插入图片描述
AgileConfig的架构比较简单,主要是分3块:

客户端

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

节点、管理程序

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

数据库

使用数据库来存储数据,目前支持Sqlserver, Mysql, Sqlite 三种数据库。因为服务端使用EF Core框架访问数据,原则上只要EF Core支持的数据库,节点就可以很方便的支持它。

部署服务端

通过docker部署,目前支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。本次示例使用轻量级的sqlite作为数据存储

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
  1. 通过docker建立一个agile_config实例,其中有3个环境变量需要配置:
  2. adminConsole 配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。
    db:provider 配置程序的数据库类型。目前程序支持:sqlite,mysql,sqlserver 三种数据库。
  3. db:conn 配置数据库连接串

进入系统

通过浏览器访问我们地址:http://localhost:5000/
在这里插入图片描述

界面还是简约美观的,第一次登录需要初始化管理员密码,然后登录进入系统

在这里插入图片描述
通过主界面我们看到了下面这个几个菜单

节点:AgileConfig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileConfig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。
在这里插入图片描述
应用:AgileConfig支持多应用程序接入。需要为每个应用程序配置名称、ID、秘钥等信息。每个应用可以设置是否可以被继承,可以被继承的应用类似apollo的公共 namespace 的概念。公共的配置可以提取到可继承应用中,其它应用只要继承它就可以获得所有配置。如果子应用跟被继承应用之间的配置键发生重复,子应用的配置会覆盖被继承的应用的配置。子应用可以继承多个应用,如果多个应用之间发生重复键,按照继承的顺序,后继承的应用的配置覆盖前面的应用。

在这里插入图片描述
创建好应用后我们可以点击列表的配置该应用的配置项。

在这里插入图片描述
在这里插入图片描述
新添加的配置并不会被客户端感知到,需要手工点击“上线”才会推送给客户端。

在这里插入图片描述
已上线的配置如果发生修改、删除、回滚操作,会实时推送给客户端。版本历史记录了配置的历史信息,可以回滚至任意版本。

在这里插入图片描述
客户端:可以查看已经连接的客户端

日志:记录一些关键信息的日志

创建客户端

Install-Package AgileConfig.Client

连接我们的配置中心,在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配置一个新的IConfigurationSource
                    config.AddAgileConfig(configClient);
                    //找一个变量挂载client实例,以便其他地方可以直接使用实例访问配置
                    ConfigClient = configClient;
                    //注册配置项修改事件
                    configClient.ConfigChanged += ConfigClient_ConfigChanged;
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                });

        /// 

        /// 此事件会在配置项目发生新增、修改、删除的时候触发
        /// 
        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": "test",
    "secret": "123",//密钥
    "nodes": "http://localhost:5000" //多个节点使用逗号分隔
  }

标签:配置,节点,应用,NET,config,AgileConfig,轻量级,客户端
来源: https://blog.csdn.net/qq_34202873/article/details/117620996

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有