
.Net AgileConfig轻量配置中心
在现代的软件开发中,配置管理是分布式系统和微服务架构中不可或缺的一部分。一个好的配置中心不仅可以集中管理应用配置,还能动态更新配置而无需重启服务。今天,我将向大家介绍一个专为.NET开发者设计的轻量级配置中心——AgileConfig。
为什么我选择 AgileConfig 而不是 Apollo 和 Nacos
数据库支持
Nacos 虽然支持 MySQL,但其数据库版本要求较高,对于一些遗留系统来说,这可能是一个痛点。相比之下,AgileConfig 提供了更广泛的数据库支持,包括 MySQL、SQLite、SQL Server 等,这意味着它能够更好地兼容不同环境,无需对数据库进行大规模升级。
轻量级与易用性
Apollo 和 Nacos 都是功能强大的配置中心,但它们的复杂性也带来了更高的学习和运维成本。对于.NET开发者来说,AgileConfig 更轻量、更易于上手。它专为.NET生态设计,提供了友好的管理界面和简洁的API几乎,无需改造现有代码即可集成。
AgileConfig 是什么?
AgileConfig 是一个基于.NET Core开发的轻量级配置中心,旨在为分布式系统和微服务提供高效的配置管理解决方案。它简单易用,功能强大,同时与.NET生态无缝集成。无论是小型项目还是中型分布式系统,AgileConfig都能满足你的需求。
简单一个Demo示例
安装AgileConfig
AgileConfig 提供了多种部署方式,包括直接部署到服务器或通过 Docker 部署。
国内容器镜像:docker.1ms.run/kklldog/agile_config:latest
。
以下是通过 Docker 部署的简单步骤:
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
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)
然后我们打开5000端口,设置密码后登录用户名是admin
登录后我们来到主界面。
简单配置
在页面点击App然后创建一个测试应用。
然后我们点击Configurations
进行创建配置,这里我创建了一个Test
键,然后值为TestAAA
,在创建后需要点击发布按钮。
如果我们想进行Json
的编辑,可以点击编辑JSON
按钮。
创建测试API项目
创建一个AgileConfigConfigurationCenterExample
项目用于测试AgileConfig配置中心,这里我使用的框架版本是.net8
。
安装相关依赖包。
<PackageReference Include="AgileConfig.Client" Version="1.7.6" />
然后,在 Program.cs 中配置 AgileConfig:
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();
在appsettings.json
中设置一下AgileConfig
的配置。
"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)
},
设置WeatherForecastController
控制器代码,将直接获取我们刚刚在服务器上的配置"Test:Test"
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"];
}
}
接着我们调用试试看,发现没什么问题。
SqlServer 配置
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$$;
请注意这里的$
必须要写成$$
。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

