当服务逐渐的增多,对各服务的配置管理愈加重要,轻量级的配置中心,入手或是搭建都简单许多,基于.net core开发的轻量级配置中心AgileConfig,功能强大,上手简单。
https://github.com/dotnetcore/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
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,当然优先级最高的还是环境变量和命令行的配置。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0#default-configuration
作为.Net中的轮子,我是挺喜欢用这个的,搭建上手理解都极为方便,功能强大,操作简便,同时部署起来也是极为轻松,资源占有少,皮肤也漂亮(相比Apollo)。
AgileConfig大佬地址:https://www.cnblogs.com/kklldog/p/agile-config.html
AgileConfig地址:https://github.com/dotnetcore/AgileConfig
2021-12-27,望技术有成后能回来看见自己的脚步