當服務逐漸的增多,對各服務的配置管理愈加重要,輕量級的配置中心,入手或是搭建都簡單許多,基於.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"];
}
}
}