.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,一经查实,立即删除!

相关文章

php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?

php - 如何在单个网页上连接多个MySQL数据库&#xff1f;我将信息分散在几个数据库中&#xff0c;并希望使用PHP将所有信息放到一个网页上。 我想知道如何连接到单个PHP网页上的多个数据库。我知道如何使用以下方法连接到单个数据库&#xff1a;$dbh mysql_connect($hostname,…

Redis主从持久化测试

1:redis主从环境&#xff0c;均未开启持久化&#xff1b;当主实例宕机&#xff0c;从实例上的数据不受影响&#xff1b;当主恢复后&#xff0c;主实例上的数据将会继续同步到从实例&#xff0c;即原来的值将变为空值&#xff1b;[rootserver11 ~]# /usr/local/redis2/bin/redis…

人生苦短,我用Python!

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

【OpenCV学习】OpenMP并行化实例

作者&#xff1a;gnuhpc 出处&#xff1a;http://www.cnblogs.com/gnuhpc/ #include "cv.h" #include "highgui.h" #include <stdio.h> #include <stdlib.h> #include <omp.h>void EdgeOpenMP(IplImage *src,IplImage *dst,int thresh) …

一探即将到来的 C# 10

前言本来因为懒不想写这篇文章&#xff0c;但是不少人表示有兴趣&#xff0c;于是最后决定还是写一下。.NET 6 最近几个预览版一直都在开发体验&#xff08;如 hot reload、linker 等&#xff09;、平台支持&#xff08;如 Android、iOS 等&#xff09;、工具链&#xff08;如 …

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

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

c mysql binlog_Mysql Binlog

一&#xff0e;Mysql Binlog格式介绍Mysql binlog日志有三种格式&#xff0c;分别为Statement,MiXED,以及ROW&#xff01;1.Statement&#xff1a;每一条会修改数据的sql都会记录在binlog中。优点&#xff1a;不需要记录每一行的变化&#xff0c;减少了binlog日志量&#xff0c…

读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# 中…

mysql 5.7.6 5.7.19_MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)

本文主要向大家介绍MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)了 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。1、从官网下载64位zip文件。2、把zip解压到一个位置&#xff0c;此位置为安装为安装位置3、如果有以前的mysql 如…

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…

mysql目录树_无限级目录树+记忆节点状态(PHP+mysql)

借鉴 网友 iuhxq 的设计制作而成的目录树&#xff0c;在此感谢 iuhxq 的代码对我大帮助。特点&#xff1a;1、无限级节点。2、直接产生html代码&#xff0c;容易修改。3、目录清楚&#xff0c;类似于资源管理器&#xff0c;(csdn论坛的&#xff0c;层数多了就不容易分清楚层次了…

NET问答: 如何使用 C# 比较两个 byte[] 的相等性 ?

咨询区 Hafthor&#xff1a;我现在业务中遇到了一个场景&#xff1a;如何简洁高效的判断两个 byte[] 的相等性&#xff1f;我现在是这么实现的&#xff0c;有一点繁琐&#xff1a;static bool ByteArrayCompare(byte[] a1, byte[] a2) {if (a1.Length ! a2.Length)return false…

也可以改为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;但是道路是曲折的。前途的光明是基于工业企业现实…

5.[BX]和Loop指令

1.Debug和MASN中读取内存单元的区别&#xff1a;Debug中:mov ax,0ffffhmov ds,axmov al,[1]MASN中:mov ax,0ffffhmov ds,axmov bx,1mov al,[bx]或者mov ax,0ffffhmov ds,axmov al,ds:[1]2.Loop指令assume cs:codecode sementmov ax,2mov cx,3s: add ax,axloop scode ednsend 其…