.NET轻量级配置中心AgileConfig

描述

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

  • 部署简答,最少只需要一个数据节点,支持docker部署

  • 支持多节点分布式部署来保证高可用

  • 配置支持按照应用隔离,应用内配置支持分组隔离

  • 使用长链接技术,配置信息实时推送到客户端

  • 支持IConfiguration、IOptions模式读取配置,原程序几乎不用改造

  • 配置修改支持版本记录,随时回滚配置

  • 所有所有节点都故障,客户端支持从本地缓存读取配置

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

如果使用apollo进行部署做配置中心,对于部分公司来讲,过于笨重,所以我个人还是挺推荐这个的,再次感谢kklldog大佬的开源项目。

部署

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

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 
  1. adminConsole 配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。

  2. db:provider 配置程序的数据库类型。目前程序支持:sqlite,mysql,sqlserver 三种数据库。

  3. db:conn 配置数据库连接串

进入系统

通过浏览器访问我们地址:http://localhost:8011/

image.png

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

image.png

通过主界面我们看到了下面这个几个菜单

节点:AgileConfig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileConfig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。

image.png

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

image.png

创建好应用后我们可以点击列表的配置该应用的配置项。

image.png

新添加的配置并不会被客户端感知到,需要手工点击“上线”才会推送给客户端。

image.png

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

image.png

客户端:可以查看已经连接的客户端

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

创建客户端

通过VS2019创建一个.Net5的WebAPI应用程序,安装组件

  <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的相关信息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>/// 此事件会在配置项目发生新增、修改、删除的时候触发/// </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" //多个节点使用逗号分隔}

读取配置

AgileConfig支持asp.net core 标准的IConfiguration,跟IOptions模式读取配置。还支持直接通过AgileConfigClient实例直接读取。本文直接注入IConfiguration来获取刚才我们配置的数据库连接信息。

在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;

在程序不关闭情况下修改配置,测试一下配置是否更新

image.png

请求接口重新获取最近配置(不是实时更新,需要等待一小会,但是满足我们的实际需求)

参考资料

开发作者的文章:https://www.cnblogs.com/kklldog/p/agile-config.html

GitHub中文文档:https://github.com/kklldog/AgileConfig/blob/master/README_CN.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人生苦短,我用Python!

在大数据时代&#xff0c;信息更新非常快速&#xff0c;计算机语言也犹如雨后春笋般被我们所熟知。C语言、C、Java等可谓是各领风骚、独占鳌头&#xff0c;而Python则是一门近几年崛起很快也很火的编程语言。虽说编程语言难分好坏&#xff0c;各有千秋。但Python到底有什么魔力…

预售┃没有标题,配得上这款“俄罗斯方块”

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

读Getting Started With Windows PowerShell笔记

使用中Powershell的操作跟Linux中的终端操作很多地方是一致的&#xff0c;当然&#xff0c;还是有着Windows自己的特色&#xff0c;比如&#xff0c;不分大小写。之前命令行中的命令大部分在这里也可以用&#xff0c;而且用法一样。选中后点右键&#xff0c;即复制到剪切板。不…

NET问答: String 和 string 到底有什么区别?

咨询区 Peter O.&#xff1a;开门见山&#xff0c;参考如下例子&#xff1a;string s "Hello world!"; String s "Hello world!";请问这两者有什么区别&#xff0c;在实际使用上要注意一些什么&#xff1f;回答区 Derek Park&#xff1a;string 是 C# 中…

LVS负载均衡-NET、DR模式配置

模型一&#xff1a;NAT模型的配置 实验环境&#xff1a; 采用VMware虚拟机&#xff0c;版本6.0.5 操作系统&#xff1a;Red Hat Enterprise Linux 5 (2.6.18) 虚拟机1&#xff1a;充当Director&#xff1a;网卡1(桥接):192.168.0.33&#xff08;对外&#xff09;&#xff0c;网…

编程语言的“别样”编年史

全世界只有3.14 % 的人关注了数据与算法之美代码是一门语言&#xff0c;这门语言搭建了人与计算机沟通的桥梁。通过编写代码&#xff0c;人类可以“命令”计算机开发网页、开发软件、搭建游戏... ... 这门语言并不是上帝的发明&#xff0c;它是前辈们发挥聪明才智创造出来的&am…

也可以改为while(input[0])或while(cininput[0])

2019独角兽企业重金招聘Python工程师标准>>> <<c primer plus>> // static.cpp -- using a static local variable #include <iostream> // constants const int ArSize 10; // function prototype void strcount(const char * str); int main()…

.NET Core HttpClient请求异常分析

【导读】最近项目上每天间断性捕获到HttpClient请求异常&#xff0c;感觉有点奇怪&#xff0c;于是乎观察了两三天&#xff0c;通过日志以及对接方沟通确认等等&#xff0c;查看对应版本源码&#xff0c;尝试添加部分配置发布后&#xff0c;观察十几小时暂无异常情况出现&#…

python 小甲鱼 代码_Python小代码

先自我介绍一下&#xff0c;本人是正在自学Python的小白&#xff0c;没事分享一下自己写的小代码&#xff0c;欢迎在评论区补充。游戏管理系统&#xff1a;代码如下&#xff1a;def healthe(m):if m"Y"or y:print("欢迎&#xff0c;请进入游戏&#xff01;"…

原来这些行业的“潜规则”是这样的...

全世界只有3.14 % 的人关注了数据与算法之美在日常生活中&#xff0c;我们往往受限于专业和工作&#xff0c;对自己所处行业之外的事物了解不多。今天&#xff0c;数据汪带大家扒一扒各个行业中不为人知的“潜规则”&#xff0c;看看你们知道几个&#xff1f;看完上面20个“潜规…

“工业互联网平台“将成为工业制造企业的标配

目 录1. 概述2. 背景3. 评述1. 概述“‘工业互联网平台’将成为工业制造企业的标配”的命题既是基于工业生产企业现实情况的判断&#xff0c;又是对工业企业未来发展的需求判断。前途是光明的&#xff0c;但是道路是曲折的。前途的光明是基于工业企业现实…

预售┃每个人都应该学习编程,因为它会教你如何思考

▲数据汪特别推荐点击上图进入玩酷屋扎克伯格11岁开始学习编程&#xff0c;创办Facebook&#xff1b;比尔盖茨13岁学习编程&#xff0c;创办微软……乔布斯说&#xff1a;“每一个人都应该学习电脑编程&#xff0c;因为它会教你如何思考。"现在在北京上海&#xff0c;顶级…

python3抓取图片_通过Python3 爬虫抓取漫画图片

引言&#xff1a;最近闲来无事所以想着学习下python3&#xff0c;看了好长时间的文档&#xff0c;于是用python3写了一个漫画抓取的程序&#xff0c;好了 废话不多说上码&#xff01;第一步&#xff1a;准备环境 和类库&#xff0c;我用的是python3.5 禁用 python2.x &…

有个厉害的程序员女朋友是什么体验?

全世界只有3.14 % 的人关注了数据与算法之美自古妇女能顶半边天&#xff0c;在 IT 界&#xff0c;女生的力量也越来越强大&#xff0c;杰出的女性闪耀在我们身边。有人说&#xff1a;世界上有两种程序员一种是程序员一种是女程序员据数据汪了解&#xff0c;世界上第一个程序员 …

out参数不用赋值?这么神奇吗!

首先提醒大家一下&#xff0c;docs.microsoft.com上的《C# 指南》是这样描述out 参数修饰符[1]的&#xff1a;作为 out 参数传递的变量在方法调用中传递之前不必进行初始化。但是&#xff0c;被调用的方法需要在返回之前赋一个值。请注意上面加粗的话&#xff0c;然后看看下面的…

年底求职难?起薪28万的数据岗位,人才缺口达150万,不限专业学历……

全世界只有3.14 % 的人关注了数据与算法之美2018下半年开始&#xff0c;“寒冬”说愈演愈烈。事实上企业的结构调整、人才升级是常见的现象&#xff0c;而且并非所有互联网企业都在“缩招”&#xff0c;很多企业甚至计划在明年扩大校招。人工智能、数据技术的迅猛发展&#xff…

在.NET 6中使用DateOnly和TimeOnly

千呼万唤始出来在.NET 6(preview 4)中引入了两个期待已久的类型&#xff0c;将作为核心库的一部分。DateOnly和TimeOnly允许开发人员表示DateTime的日期或时间部分。这两个类型为值类型&#xff08;struct type&#xff09;&#xff0c;可以在代码中独立处理日期或时间概念时使…

预售┃要孩子逻辑清晰、善于思考,别忽视空间想象力的游戏锻炼!

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护...

dapr目前更新到了1.2版本&#xff0c;在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案&#xff0c;很快被社区加入到了1.2的里程碑中并且在1.2 release 相关升级文档里可以看到已经实现了对Alibaba Sentinel的支持。今天我们就讲讲我们如何通过…

预售┃让苹果CEO库克折服的程序员仅10岁!?

▲数据汪特别推荐点击上图进入玩酷屋在国外&#xff0c;编程教育课早已普及&#xff0c;美国、英国、新加坡等国家少儿编程已进入小学标准必修课程体系。韩国、日本也相继在2017年和2020年开展一年级至初三的编程教育普及。美国总统孙女&#xff0c;五岁开始学习在电脑上编程最…