ASP .NET Core 使用 Agile Config配置中心
当服务逐渐的增多,对各服务的配置管理愈加重要,轻量级的配置中心,入手或是搭建都简单许多,基于.net core开发的轻量级配置中心AgileConfig,功能强大,上手简单。
Agile Config支持热更新。AgileConfig Client连上节点后每30s会跟节点心跳一次。每次心跳都会比较Client上所有配置的hash跟服务端的所有配置的hash是否一致,如果不一致那么会全量刷新一次配置。
当客户端读取配置后会在本地生成一个app.agileconfig.client.configs.cache
文件。如果线上节点离线,会从本地配置读取。
项目地址:
部署
拉取镜像
docker pull kklldog/agile_config:latest
# mysql使用下面的镜像
docker pull kklldog/agile_config:mysqlconnector
初始化数据库
用户只需要手工建一个空库,所有的表在第一次启动的时候都会自动生成。目前支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。 provider对照:
- sqlserver = SqlServer
- mysql = MySql
- sqlite = Sqlite
- npgsql = PostgreSql
- oracle = Oracle
运行服务端
docker run -d --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 /dockerdata/agileconfig:/app/db \
kklldog/agile_config:latest
使用sqlserver数据库需要在连接串上加上 TrustServerCertificate=True
;
通过docker建立一个agile_config实例,其中有3个环境变量需要配置:
- adminConsole 配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。
- db__provider 配置程序的数据库类型。目前程序支持:sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。
- db__conn 配置数据库连接串
使用 docker-compose 运行多节点集群, 环境变量 cluster=true 会尝试获取容器的 IP ,主动注册到节点列表:
version: '3'
services:
agile_config_admin:
image: "kklldog/agile_config"
ports:
- "15000:5000"
networks:
- net0
volumes:
- /etc/localtime:/etc/localtime
environment:
- TZ=Asia/Shanghai
- adminConsole=true
- cluster=true
- db__provider=mysql
- db__conn= database=configcenter;data source=192.168.0.115;User Id=root;password=mdsd;port=3306
agile_config_node1:
image: "kklldog/agile_config"
ports:
- "15001:5000"
networks:
- net0
volumes:
- /etc/localtime:/etc/localtime
environment:
- TZ=Asia/Shanghai
- cluster=true
- db__provider=mysql
- db__conn= database=configcenter;data source=192.168.0.115;User Id=root;password=mdsd;port=3306
depends_on:
- agile_config_admin
agile_config_node2:
image: "kklldog/agile_config"
ports:
- "15002:5000"
networks:
- net0
volumes:
- /etc/localtime:/etc/localtime
environment:
- TZ=Asia/Shanghai
- cluster=true
- db__provider=mysql
- db__conn= database=configcenter;data source=192.168.0.115;User Id=root;password=mdsd;port=3306
depends_on:
- agile_config_admin
networks:
net0:
Agile Config Web使用
初始化管理员密码
第一次运行程序需要初始化超级管理员密码,超管用户名固定为 admin
节点
AgileConfig支持多节点部署,所有的节点都是平行的。为了简化部署,AgileConfig并没有单独的控制台程序,请直接使用任意一个节点作为控制台。当环境变量adminConsole=true时,该节点同时兼备数据节点跟控制台功能。为了控制台能够管理节点,所以需要在控制台配置节点的信息。
💥注意:即使是作为控制台的数据节点同样需要添加到管理程序,以便管理它。
新建应用
配置项
ASP .NET Core读取配置
控制台可以查看已连接的客户端。
使用Nuget安装包
Install-Package AgileConfig.Client
初始化客户端
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"AgileConfig": {
"appId": "app",
"secret": "xxx",
"nodes": "http://localhost:5000,http://localhost:5001"//多个节点使用逗号分隔,
"name": "client_name",
"tag": "tag1",
"env": "DEV"
}
}
在appsettings.json文件配置agileconfig的配置信息。
builder.Host.UseAgileConfig(e => Console.WriteLine($"configs {e.Action}"));
//builder.Host.UseAgileConfig(new ConfigClient($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json"), e => Console.WriteLine($"configs {e.Action}"));
读取配置
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Xml.Linq;
namespace WebApplication1.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
IConfiguration _configuration;
public WeatherForecastController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
public string Get()
{
return _configuration["db"];
}
}
}