.Net Core&Agile Config配置中心
当服务逐渐的增多,对各服务的配置管理愈加重要,轻量级的配置中心,入手或是搭建都简单许多,基于.net core开发的轻量级配置中心AgileConfig,功能强大,上手简单。
https://github.com/dotnetcore/AgileConfig
AgileConfig架构图
AgileConfig配置端搭建
1、新建一个文件夹用来作为配置存储
mkdir agileconfig
2、新开数据库&配置账户名
3、下载镜像&创建容器
AgileConfig支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。依照实际使用的数据库类型选择,此处我这使用mysql。
sudo docker run \
--name StarCityAgileConfig \
-e TZ=Asia/Shanghai \
-e adminConsole=true \
-e db:provider=mysql \
-e db:conn="Server=xxx; Database=xxx;Port=xxx;charset=utf8;uid=xxx;pwd=xxx;" \
-p 9527:5000 \
-v /agileconfig:/app/db \
-d \
kklldog/agile_config:latest
- name:容器名,给定个容器名。
- TZ:指定时区。
- adminConsole:配置程序是否使用管理控制台。
- 如果为true则启用控制台功能,访问该实例会出现管理界面。
- 每个实例都可以选择使用管理界面,共用一套数据源只是呈现端口不同
- 默认账号为admin,首次登录需要设置密码,设置后多个管理界面都可以通用
- db:provider:配置程序的数据库类型。
- 目前程序支持:sqlite,mysql,sqlserver,npgsql, oracle 五种数据库。
- 按照项目中允许的数据库使用即可。
- 首个节点启动后会创建数据表(相当好~)。
- db:env:{env}:provider,可以指定特定环境下使用某个数据库,如db:env:PROD.provider=sqlserver, db:env:DEVELOPMENT.provider=mysql
- db:conn:配置数据库连接串。
- 按照不同的数据库类型设置不同的数据库连接字符串。
- 数据库使用第二步创建的库。
- 默认内置了 DEV, TEST, STAGING, PROD 四个常用的环境,如不够,可直接操作agc_setting 表,增加自定义环境。
- db:env:{env}:conn,可以指定特定环境下使用某个数据库,如db:env:PROD.conn=xxx, db:env:DEVELOPMENT.conn=xxx
- p:指定对外端口,用户客户端去连接。
- 设置允许使用的对外端口即可。
- v:节点的数据卷挂载
- 此处挂载到第一步设置的文件夹路径下,可按实际需要设置挂载路径或是不设置-v参数也行。
- -d:后台运行
4、打开地址,配置默认账号admin的密码
5、节点管理
首个节点进入管理界面后,可以将自身加入到节点列表中。
可以在节点列表中增加节点,这样方便所有节点可以统一管理。
客户端设置
1、在需要管理配置的项目中增加Nuget包,以接入AgileConfig配置端
Install-Package AgileConfig.Client
2、在AgileConfig配置端注册客户端信息
3、在appsettings.json增加连接AgileConfig的节点,将第二步中的ID和密钥填入配置中,设置连接的配置端节点,可以设置多个节点,随机连接一个节点。
{
"AgileConfig": {
"appId": "app",
"secret": "xxx",
"nodes": "http://localhost:9527,http://localhost:9528"//多个节点使用逗号分隔,
"name": "client_name",
"tag": "tag1",
"env": "DEV"
}
}
当某个节点不可用,客户端会切换到其他节点,所有节点不可用,使用内存缓存配置或是读取本地文件缓存配置。
4、在Program设置使用AgileConfig,如此增加环境后,AgileConfigProvider便会从相应环境appsettings.json中读取上述配置
.ConfigureAppConfiguration((context, config) =>
{
var envName = context.HostingEnvironment.EnvironmentName;
var configClient = new ConfigClient($"appsettings.{envName}.json");
config.AddAgileConfig(configClient, arg => Console.WriteLine($"config changed , action:{arg.Action} key:{arg.Key}"));
})
在Startup中添加服务
services.AddAgileConfig();
5、设置需要读取配置的代码,按照AspNetCore读取配置的方式即可,启动客户端
[Route("api/[controller]")]
[ApiController]
public class HealthController : ControllerBase
{
private readonly ILogger<HealthController> _logger;
private readonly IConfiguration _configuration;
public HealthController(ILogger<HealthController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
[HttpGet]
[Route("Index")]
public IActionResult Index()
{
_logger.LogWarning($"This is HealthController {_configuration["Port"]}.");
return Ok();
}
}
6、AgileConfig配置端配置,按照json格式设置,新建或是编辑已有配置或是导入json文件或数据等都行,点击发布则下发到各连接的客户端中。
发布完毕,再次请求便是最新的配置信息,作为配置中心提供的热加载提供了更多的灵活度。
7、在配置端这边还有许多功能,如对客户端的管理,客户端连接的查看等,配置项历史记录,版本回滚等,系统日志方便追踪多端间连接问题,以及配置端的用户管理等。
配置读取优先级
如此配置后,再去取值,如果在AgileConfig中有则默认从那取值,没有再去找机密文件,再去找appsettings.{env}.json,最后appsettings.json,当然优先级最高的还是环境变量和命令行的配置。
作为.Net中的轮子,我是挺喜欢用这个的,搭建上手理解都极为方便,功能强大,操作简便,同时部署起来也是极为轻松,资源占有少,皮肤也漂亮(相比Apollo)。
AgileConfig大佬地址:https://www.cnblogs.com/kklldog/p/agile-config.html
AgileConfig地址:https://github.com/dotnetcore/AgileConfig
2021-12-27,望技术有成后能回来看见自己的脚步
.Net Core&Agile Config配置中心的更多相关文章
- springcloud之config配置中心-Finchley.SR2版
本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...
- Spring Cloud(9):Config配置中心
Config配置中心作用简单来讲:统一配置,方便管理 开源配置中心: 1.百度Disconf 2.阿里Diamand 3.Spring Cloud Config 搭建Config-Server 快速上 ...
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...
- 微服务SpringCloud之Spring Cloud Config配置中心Git
微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...
- 微服务SpringCloud之Spring Cloud Config配置中心服务化
在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...
- SpringCloud学习笔记(7):使用Spring Cloud Config配置中心
简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...
- SpringCloud的入门学习之概念理解、Config配置中心
1.SpringCloud Config分布式配置中心.分布式系统面临的配置问题. 答:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...
- SpringCloud之Config配置中心+BUS消息总线原理及其配置
一.配置中心作用 在常规的开发中,每个微服务都包含代码和配置.其配置包含服务配置.各类开关和业务配置.如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题.当系统逐步迭代,其微服 ...
- spring-cloud config配置中心
这里那些概念不说,主要是记录下spring cloud config配置中心的服务端和客户端的一个demo. 服务端即提供统一配置文件 客户端即从服务端读取配置 1.新建一个spring boot项目 ...
随机推荐
- Volatile的3大特性
Volatile volatile是Java虚拟机提供的轻量级的同步机制 3大特性 1.保证可见性 当多个线程同时访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值 案例代码 ...
- CSS3实现字体描边
CSS3实现字体描边的两种方法 -webkit-text-stroke: 1px #fff;:不建议,向内描边,字体颜色变细,效果不佳: 用box-shadow模拟描边,向外描边,保留字体粗细,赞! ...
- List 去重的 6 种方法,这个方法最完美!
在日常的业务开发中,偶尔会遇到需要将 List 集合中的重复数据去除掉的场景.这个时候可能有同学会问:为什么不直接使用 Set 或者 LinkedHashSet 呢?这样不就没有重复数据的问题了嘛? ...
- C# / VB.NET 在Word中嵌入多媒体(视频、音频)文件
Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体 ...
- SpringBoot Profiles 多环境配置及切换
目录 前言 默认环境配置 多环境配置 多环境切换 小结 前言 大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如: 开发环境(dev) 测试环境(tes ...
- 学习java 7.22
学习内容: GridBagLayout GridBagLayout布局管理器的功能最强大,但也最复杂,与GridLayout布局管理器不同的是,在GridBagLayout布局管理器中,一个组件可以跨 ...
- Output of C++ Program | Set 3
Predict the output of below C++ programs. Question 1 1 #include<iostream> 2 using namespace st ...
- Windows内存管理-分段
0x01原因 分段的产生原属于安全问题. 一个程序可以自由的访问不属于它的内存位置,甚至可以对那些内容进行修改.这也导致安全问题 促使一种内存隔离的手段 分段的产生. 0x02分段原理 处理器要求在加 ...
- Declarative Pipeline 基础语法
Declarative Pipeline(声明式)核心概念 核心概念用来组织pipeline的运行流程 1.pipeline :声明其内容为一个声明式的pipeline脚本 2.agent:执行节点( ...
- JS 中常用的去重
第一种:indexOf (获取字符串值在字符串中首次出现的位置,若没有这个值,则返回-1) let arr = [15,45,88,45,78,15,55,88]; let arr1 = []; // ...