.NET 开源配置组件 AgileConfig 初体验

介绍

在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善,dotnet的客户端也主要是国人在维护和开发,之前公司就是选型的Apollo,而且也在生产环境稳定运行,但是服务端是Java的,而且部署服务端也有些麻烦。

今天主要介绍 AgileConfig,这是一个基于.net core开发的轻量级配置中心,之前跟作者也有过沟通,也很热情帮忙解决问题,它的特点有部署简单、配置简单、使用简单、学习简单等,同时也支持高可用(多节点)和docker部署,使用了FreeSql支持了多种多种数据库存储,Sqlserver, Mysql, Sqlite, PostgreSql,Oracle,FreeSql大法好!

架构图

部署服务端

首先,我们需要部署服务端,包含了控制台UI和节点服务,节点服务使用了长连接,配置变更后,会实时推送给客户端,部署推荐使用docker部署,因为项目是开源的,而且是.net core 编写的,还有一种方式是可以到github下载源代码,编译后发布运行。

配置信息是在数据库记录的,我们需要新建一个空的数据库,然后运行命令,程序会自动帮我们初始化表结构和数据。

docker run --name agile_config -e adminConsole=true -e db:provider=mysql -e db:conn="DataBase=configdb;Data Source=host.docker.internal;User Id=root;Password=123456;" -p 5000:5000 -d kklldog/agile_config:latest

参数介绍:

•adminConsole 配置程序是否为管理控制台,如果为true则启用控制台功能,访问该实例会出现管理界面,多节点部署的话,只需要开启一个控制台即可。•db:provider 配置程序的数据库类型,可选 sqlserver,mysql,sqlite,npgsql,oracle。•db:conn 配置数据库连接串

访问 http://localhost:5000/, 第一次启动,程序会要求我们初始化管理员密码,设置完成以后,进入到首页,另外作者最近已经用 React 重构了UI,最近会更新,大家也可以尝鲜。

然后还需要配置节点,多节点保证了高可用,那如果所有节点都挂了的话,程序会读取本地的配置缓存,来保证正常的运行,这点大家不用担心, 我们需要在节点管理页面手动添加节点,这里我启动了一个节点,添加的地址为 http://192.168.100.103:5000 ,需要注意的是,这里在docker环境不能使用 localhost。

接下来需要配置应用,点击新增应用,填写应用名称,应用Id和应用密钥。

在客户端程序使用

这里使用了asp net core web项目示例,首先需要安装客户端组件,执行一下命令或者通过Nuget安装。

Install-Package AgileConfig.Client

然后修改appsetting.json 文件

{ "AgileConfig": {"appId": "LogService","secret": "123456","nodes": "http://localhost:5000,http://localhost:5001"//多个节点使用逗号分隔}
}

然后修改 Program.cs

 public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) =>{var configClient = new ConfigClient();config.AddAgileConfig(configClient);}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});

准备工作完成,接下来就要开始使用了,我们在配置项页面上面添加配置,然后选中点击上线。

然后可以在代码中使用注入的 IConfiguration 获取配置即可

 [Route("[controller]/[action]")]public class HomeController : ControllerBase{    private readonly IConfiguration _config;public HomeController(IConfiguration config){_config = config; }[HttpGet]public IActionResult Index(){var value = _config["AgileKey"];return Ok(new { value });}

然后启动程序,就可以尽情使用 AgileConfig 了,在页面上修改配置的话,我们的客户端配置也是实时修改的。

在配置页面上的配置都是字符串键值对的,那对于Json字符串应该怎么处理呢, 我们可以使用Tuhu.Extensions.Configuration.ValueBinder.Json 扩展,通过Nuget安装即可,然后修改Startup.cs 文件

public void ConfigureServices(IServiceCollection services)
{ services.ConfigureJsonValue<LogOptions>("", Configuration.GetSection("LogOptions"));  
}

LogOptions:

public class LogOptions : IOptions<LogOptions>
{public string Level { get; set; }public int Count { get; set; }public LogOptions Value => this;
}

这样我们就可以在代码中,使用注入的 IOptions<LogOptions> 来获取读取配置。

总结

AgileConfig 是使用 .net core 开发的配置组件,部署和使用起来都很简单,但是目前还有一些不足,比如多账号权限管理,和多环境支持,一般是开发,灰度和正式,不过没有关系,项目都是开源的,大家感兴趣的一起建设,完善不足的功能,现在.NET 社区是越来越好了,如果对大家有帮助的,可以支持一下!

https://github.com/kklldog/AgileConfig

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

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

相关文章

来领资料咯!计算机专业教科书礼包

现在计算机行业越来越火爆&#xff0c;技术的更新也越来越快&#xff0c;不好好充实自己的话&#xff0c;就会被淘汰。小编这几年一直有意识地收集计算机行业相关的书籍&#xff0c;现在已经拥有5G左右的资料&#xff0c;如C、Java、Python、机器学习、网页开发Web Dev、数据分…

SQL Server日期函数集合

SQL Server日期函数集合--1&#xff1a;获取系统日期和时间值函数 --getdate() SELECT GETDATE() AS today --getutcdate() SELECT GETUTCDATE() AS today--2&#xff1a;修改日期和时间值函数 --dat --参考http://msdn.microsoft.com/zh-cn/library/ms186724.aspx --1&#xf…

Asp.Net Core 5 REST API - Step by Step(一)

翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 [1]在本文中&#xff0c;我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序&#xff0c;在其中我们可以添加、编辑、删除和查看待办事项&#xff0c;并且将使用 SQLite 来存储数…

java 运行环境注册表_Java运行环境与Windows注册表

有两种Java运行环境(JRE)&#xff0c;公有JRE (public JRE)与私有JRE(private JRE)。JDK安装程序会安装私有JRE和一个可选的公有JRE。私有JRE完全包含在JDK的安装路径下&#xff0c;仅对JDK可见&#xff0c;为JDK所用。公有JRE为系统中所有的Java程序共享&#xff0c;具有独立的…

身为程序员碰到最奇葩的需求是怎样的?

梁大折腾部门老大&#xff1a;你&#xff0c;做个微信小游戏吧我&#xff1a;啥样的&#xff1f;老大&#xff1a;反正你就做个小游戏吧&#xff0c;这个火我&#xff1a;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;柔情领导:那个运维啊&#xff0c;你来把他…

NET问答: Entity Framework 如何快速高效的删除表中所有记录 ?

咨询区 Zhenia&#xff1a;在 Entity Framework 中&#xff0c;如何快速高效的删除表中的所有行&#xff1f;我目前是这样写的。var rows from o in dataDb.Tableselect o; foreach (var row in rows) {dataDb.Table.Remove(row); }dataDb.SaveChanges();但这种做法&#xff0…

java 加减乘除是原子操作吗_聊聊原子操作那些事

原子操作&#xff0c;线程间交互数据最细粒度的同步操作&#xff0c;它可以保证线程间读写某个数值的原子性。由于不需要加重量级的互斥锁进行同步&#xff0c;因此非常轻量&#xff0c;而且也不需要在内核间来回切换调度&#xff0c;效率是非常高的。。那如何使用原子操作了&a…

有关技术管理的一些思考

这些天里工作的环境发生了一些微小的变化&#xff0c;可能以后对基层开发的程序员也会有更加具体的影响。上周参加 Open Party 时&#xff0c;重点听了《那些失败的项目们》&#xff0c;分析了一个项目的提出、实施&#xff0c;直到最后失败的过程。我也在想一个技术团队究竟应…

15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!

导读&#xff1a;从衣食住行到生活的方方面面&#xff0c;未来必将会有天翻地覆的变化。大数据、云计算、物联网和人工智能这些年的发展&#xff0c;让我们对并不遥远的未来有了更多想象和期待。那些我们现阶段不可企及的所思所想&#xff0c;将在未来成为大部分人的日常。这么…

解决 .NET Core 在 Linux Container 中获取 CurrentCulture 不正确的问题

背景在将公司一款基于 .NET Framework 的控制台程序迁移到 .NET Core 3.1 时&#xff0c;发现程序中本地化的部分失效&#xff0c;症状类似于对 Thread.CurrentThread.CurrentCulture.Name 的值进行 Substring() 操作时抛出 ArgumentOutOfRangeException 异常。该程序在 Window…

Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...

【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承super的使用1.使用super访问父类的域和方法注意&#xff1a;正是由于继承&#xff0c;使用this可以访问父类的域和方法。但是有时为了明确指明父类的域和方法&#xff0c;就要用关键字super。this和super都…

机器学习资料升级版来了!!!

机器学习一直是一个热门的领域。上次分享的机器学习资料【资源】机器学习资料包来袭受到大家的广泛好评&#xff0c;今天小编打算分享一份机器学习升级版的资料&#xff0c;有斯坦福大学-深度学习基础教程、机器学习实战、人工智能与大数据、Tagging等。顺序最下优化算法Error …

java consumer 使用_java.util.function.Consumer的用法

Consumer类包含两个方法&#xff0c;一个accept方法用来对输入的参数进行自定义操作&#xff0c;因为是个抽象方法&#xff0c;所以需要实例化对象的时候进行Override&#xff0c;另一个andThen方法跟Function的方法一样是一个default方法&#xff0c;已经有内部实现所以不需要…

程序员从初级到中级10个秘诀

Justin James曾发表过一篇博文《10 tips for advancing from a beginner to an intermediate developer》&#xff0c;为我们分享如何才能完成程序员从初级到中级的蜕变&#xff0c;现将中文译文转载于此&#xff0c;供大家借鉴。 在一封与TechRepublic会员交流的邮件当中&…

C# 可空类型

C# 单问号 ? 与 双问号 ?? ? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值&#xff0c;意思是这个数据类型是 Nullable 类型的。int? i 3;等同于&#xff1a;Nullable<int> i new Nullable<int>(3); int i; //默认值0…

K-Means算法的10个有趣用例

K-means算法具有悠久的历史&#xff0c;并且也是最常用的聚类算法之一。K-means算法实施起来非常简单&#xff0c;因此&#xff0c;它非常适用于机器学习新手爱好者。首先我们来回顾K-Means算法的起源&#xff0c;然后介绍其较为典型的应用场景。起源1967年&#xff0c;James M…

计算数字的出现次数 java_关于Java:如何计算数字在.txt文件中出现的次数

早上好&#xff0c;我正在做一些Java练习&#xff0c;偶然发现了这个问题。 我有一个.txt文件&#xff0c;其中包含多个数字&#xff0c;每行一个。 练习的目的是查看哪些数字等于10 ^ 0&#xff0c;...&#xff0c;10 ^ n直到达到n。 然后&#xff0c;我必须在.txt中写入每个数…

Asp.net中的HttpModule和HttpHandler的简单用法

在Asp.net中&#xff0c;HttpModule和HttpHandler均可以截取IIS消息进行处理&#xff0c;这使得我们制作人员能够非常方便的进行诸如图片水印添加&#xff0c;图片盗链检查等功能。 下面先就HttpModule的使用方法进行简单说明&#xff1a; using System;using System.Web;names…

C# $的用法

今天闲来无事&#xff0c;就随便在网上乱看&#xff0c;突然想到Jquery的$符号很强大&#xff0c;那么C#有没有这个东西呢&#xff0c;一查&#xff0c;果然有。经查证发现&#xff0c;这个是在C#6.0出现的一个新特性&#xff0c;也就是一个小语法糖&#xff0c;其作用相当于对…

想转行人工智能?机会来了!!!

一个坏消息&#xff1a;2018年1月 教育部印发的《普通高中课程方案和语文等学科课程标准》新加入了数据结构、人工智能、开源硬件设计等 AI 相关的课程。这意味着职场新人和准备找工作的同学们&#xff0c;为了在今后十年内不被淘汰&#xff0c;你们要补课了&#xff0c;从初中…