当服务逐渐的增多,对各服务的配置管理愈加重要,轻量级的配置中心,入手或是搭建都简单许多,基于.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,望技术有成后能回来看见自己的脚步

.Net Core&Agile Config配置中心的更多相关文章

  1. springcloud之config配置中心-Finchley.SR2版

    本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...

  2. Spring Cloud(9):Config配置中心

    Config配置中心作用简单来讲:统一配置,方便管理 开源配置中心: 1.百度Disconf 2.阿里Diamand 3.Spring Cloud Config 搭建Config-Server 快速上 ...

  3. 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh

    SpringCloud系列教程 | 第七篇:Spring Cloud Config 配置中心高可用和refresh Springboot: 2.1.6.RELEASE SpringCloud: Gre ...

  4. 微服务SpringCloud之Spring Cloud Config配置中心Git

    微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务 ...

  5. 微服务SpringCloud之Spring Cloud Config配置中心服务化

    在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...

  6. SpringCloud学习笔记(7):使用Spring Cloud Config配置中心

    简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...

  7. SpringCloud的入门学习之概念理解、Config配置中心

    1.SpringCloud Config分布式配置中心.分布式系统面临的配置问题. 答:微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...

  8. SpringCloud之Config配置中心+BUS消息总线原理及其配置

    一.配置中心作用 在常规的开发中,每个微服务都包含代码和配置.其配置包含服务配置.各类开关和业务配置.如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题.当系统逐步迭代,其微服 ...

  9. spring-cloud config配置中心

    这里那些概念不说,主要是记录下spring cloud config配置中心的服务端和客户端的一个demo. 服务端即提供统一配置文件 客户端即从服务端读取配置 1.新建一个spring boot项目 ...

随机推荐

  1. 使用 Skywalking 对 Kubernetes(K8s)中的微服务进行监控

    1. 概述 老话说的好:任何成功都不是轻易得来的,是不断地坚持与面对的结果. 言归正传,之前我们聊了 SpringCloud 开发的微服务是如何部署在  Kubernetes(K8s)集群中的,今天我 ...

  2. 日常Java测试第二段 2021/11/12

    第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ...

  3. day03 部署NFS服务

    day03 部署NFS服务 NFS的原理 1.什么是NFS 共享网络文件存储服务器 2.NFS的原理 1.用户访问NFS客户端,将请求转化为函数 2.NFS通过TCP/IP连接服务端 3.NFS服务端 ...

  4. Leetcode中的SQL题目练习(一)

    595. Big Countries https://leetcode.com/problems/big-countries/description/ Description name contine ...

  5. Spark相关知识点(一)

    spark工作机制,哪些角色,作用. spark yarn模式下的cluster模式和client模式有什么区别.

  6. Kafka入门教程(二)

    转自:https://blog.csdn.net/yuan_xw/article/details/79188061 Kafka集群环境安装 相关下载 JDK要求1.8版本以上. JDK安装教程:htt ...

  7. Spark的shuffle和MapReduce的shuffle对比

    目录 MapperReduce的shuffle Spark的shuffle 总结 MapperReduce的shuffle shuffle阶段划分 Map阶段和Reduce阶段 任务 MapTask和 ...

  8. STL学习笔记1

    STL六大部件 容器.分配器.算法.迭代器.适配器.仿函数 他们的关系如下

  9. 常用 HTTP 状态码

    下面是列举的我在项目中用到过的一些 HTTP 状态码,当然,在具体的使用中并不是用到的状态码越多越好,需要结合自己项目情况来选用适合自己的 HTTP 状态码.   HTTP 状态码 含义说明 200 ...

  10. 添加用户的jsp页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><!-- H ...