• .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,当然优先级最高的还是环境变量和命令行的配置。

    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,望技术有成后能回来看见自己的脚步

  • 相关阅读:
    道路计划猿练级(笔者:陈浩)
    OpenCV——Delaunay三角 [转载]
    mysql声明摘要
    JDBC公共动作类
    Android SharedPreferences复杂的存储
    SAP ABAP规划 SY-REPID与SY-CPROG差额
    在我的眼里,生产主管(1)——如何做竞争分析
    Oracle生成查询包括对应于所有数据表记录语句中指定的字段名
    SDUT 2894-C(最短spfa)
    人脉的本质
  • 原文地址:https://www.cnblogs.com/CKExp/p/15738149.html
Copyright © 2020-2023  润新知