.Net AgileConfig轻量配置中心 电脑版发表于:2025/2/17 11:58  >#.Net AgileConfig轻量配置中心 [TOC] tn2>在现代的软件开发中,配置管理是分布式系统和微服务架构中不可或缺的一部分。一个好的配置中心不仅可以集中管理应用配置,还能动态更新配置而无需重启服务。今天,我将向大家介绍一个专为.NET开发者设计的轻量级配置中心——AgileConfig。 为什么我选择 AgileConfig 而不是 Apollo 和 Nacos ------------ ### 数据库支持 tn2>Nacos 虽然支持 MySQL,但其数据库版本要求较高,对于一些遗留系统来说,这可能是一个痛点。相比之下,AgileConfig 提供了更广泛的数据库支持,包括 MySQL、SQLite、SQL Server 等,这意味着它能够更好地兼容不同环境,无需对数据库进行大规模升级。 ### 轻量级与易用性 tn2>Apollo 和 Nacos 都是功能强大的配置中心,但它们的复杂性也带来了更高的学习和运维成本。对于.NET开发者来说,AgileConfig 更轻量、更易于上手。它专为.NET生态设计,提供了友好的管理界面和简洁的API几乎,无需改造现有代码即可集成。 AgileConfig 是什么? ------------ tn2>AgileConfig 是一个基于.NET Core开发的轻量级配置中心,旨在为分布式系统和微服务提供高效的配置管理解决方案。它简单易用,功能强大,同时与.NET生态无缝集成。无论是小型项目还是中型分布式系统,AgileConfig都能满足你的需求。 简单一个Demo示例 ------------ ### 安装AgileConfig tn2>AgileConfig 提供了多种部署方式,包括直接部署到服务器或通过 Docker 部署。 国内容器镜像:`docker.1ms.run/kklldog/agile_config:latest`。 以下是通过 Docker 部署的简单步骤: ```bash sudo docker run --name agile_config -e TZ=Asia/Shanghai -e adminConsole=true -e db__provider=sqlite -e db__conn="Data Source=agile_config.db" -p 5000:5000 -v /etc/localtime:/etc/localtime -d kklldog/agile_config:latest ``` ```bash sudo docker run \ --name agile_config \ # 指定容器的名称为 "agile_config" -e TZ=Asia/Shanghai \ # 设置容器的时区为亚洲/上海 -e adminConsole=true \ # 启用管理控制台功能 -e db__provider=sqlite \ # 指定数据库提供者为 SQLite -e db__conn="Data Source=agile_config.db" \ # 配置 SQLite 数据库连接字符串,指定数据库文件名为 "agile_config.db" -p 5000:5000 \ # 将容器的 5000 端口映射到宿主机的 5000 端口 -v /etc/localtime:/etc/localtime \ # 将宿主机的 /etc/localtime 文件挂载到容器的 /etc/localtime,确保容器使用宿主机的时区设置 -d \ # 后台运行容器 kklldog/agile_config:latest # 使用 kklldog/agile_config 镜像的最新版本(latest tag) ```  tn2>然后我们打开5000端口,设置密码后登录用户名是`admin`登录后我们来到主界面。  ### 简单配置 tn2>在页面点击App然后创建一个测试应用。   tn2>然后我们点击`Configurations`进行创建配置,这里我创建了一个`Test`键,然后值为`TestAAA`,在创建后需要点击发布按钮。  tn2>如果我们想进行`Json`的编辑,可以点击`编辑JSON`按钮。  ### 创建测试API项目 tn2>创建一个`AgileConfigConfigurationCenterExample`项目用于测试AgileConfig配置中心,这里我使用的框架版本是`.net8`。 安装相关依赖包。 ```bash <PackageReference Include="AgileConfig.Client" Version="1.7.6" /> ``` tn2>然后,在 Program.cs 中配置 AgileConfig: ```csharp var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 在这里添加一下 builder.Host.UseAgileConfig(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); ``` tn2>在`appsettings.json`中设置一下`AgileConfig`的配置。 ```json "AgileConfig": { "appId": "Test", // 应用ID,用于在AgileConfig服务器中标识当前应用 "secret": "123456", // 应用的密钥,用于身份验证和安全连接 "nodes": "https://97a3fd9a-c4f5-4a1e-bef8-871d48382dec-10-244-3-247-5000.papa.r.killercoda.com/", // AgileConfig服务器的地址,客户端将连接到此地址获取配置信息 "name": "client_name", // 客户端名称,用于在AgileConfig服务器中标识当前客户端 "tag": "tag1", // 客户端的标签,用于分组或分类管理 "env": "dev" // 当前环境,例如开发环境(dev)、测试环境(test)或生产环境(prod) }, ``` tn2>设置`WeatherForecastController`控制器代码,将直接获取我们刚刚在服务器上的配置`"Test:Test"` ```csharp public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; private readonly IConfiguration _config; public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration config) { _logger = logger; _config = config; } [HttpGet(Name = "config")] public string Get() { return _config["Test:Test"]; } } ``` tn2>接着我们调用试试看,发现没什么问题。  ### SqlServer 配置 ```yaml newitemfeature.agile: image: docker.1ms.run/kklldog/agile_config:latest container_name: newitemfeature-agile ports: - "5000:5000" security_opt: - seccomp=unconfined environment: - TZ=Asia/Shanghai - adminConsole=true - db:provider=sqlserver - db:conn= database=xxx;data source=xxx;User Id=xxx;password=UIO8$$54!!a$$; ``` tn2>请注意这里的`$`必须要写成`$$`。