使用AgileConfig统一管理多项目配置

使用AgileConfig统一管理多项目配置

 

背景

一个设备的数字化管理软件系统,需要涵盖来料检验,部件装配,自动检验,装机激活,日常运营,维修保养,退役更换等生命周期流程,应用于生产车间,装机现场,客服运营等应用场景,业务复杂,角色众多,涉及的时间和空间范围都比较大,需要开发一系列的软件去解决不同应用场景的需求。.Net Core技术栈可以跨平台开发一系列云服务,浏览器客户端,PC桌面软件,安卓和iOS移动APP软件子系统,所有数据汇总管理,但是这一系列的软件却有着很多共同的配置管理需求,因为所管理的设备和数据是一致的,很多依赖的基础设施比如OSS,数据库,消息服务也是相同的。如果各个软件子系统独立管理配置,每当修改了一个基础设施,就要及时同步更新所有受影响的软件子系统,效率很低,还容易出错。AgileConfig统一配置管理中心能够很好的解决上述应用需求,MIT开源,资料丰富,简单易用,特别适合小企业,小团队管理多项目配置。

搭建AlileConfig云服务器

参考https://github.com/dotnetcore/AgileConfig编写docker compose脚本,由于AgileConfig镜像不支持直接配置为https访问,不符合网络安全的管理要求,所以再加一个nginx反向代理转为https访问。把SSL证书文件放在容器脚本当前目录,改名为myweb,挂载到nginx容器。

docker-compose.yml脚本,注意数据库文件路径指定到容器内部db子目录Data Source=db/myconfig.db,不然重建容器后配置数据库文件也没了。

version: '3'

services:

  agilecfg:
    container_name: agilecfg
    image: "kklldog/agile_config:v-1.7.1"
    expose:
      - 5000
    volumes:
      - ./data:/app/db
    environment:
      - TZ=Asia/Shanghai
      - adminConsole=true
      - db__provider=sqlite
      - db__conn=Data Source=db/myconfig.db
    restart: always

  agileproxy:
    container_name: agileproxy
    image: nginx:1.17.2
    ports:
      - "8100:8100"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./myweb.pem:/etc/nginx/myweb.pem
      - ./myweb.key:/etc/nginx/myweb.key
    restart: always
    links:
      - agilecfg

nginx.conf配置,注意要开启支持从http连接升级协议建立websocket连接

 

map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

server {
  listen 8100 ssl;
  ssl_certificate      myweb.pem;
  ssl_certificate_key  myweb.key;

  location / {
    proxy_pass http://agilecfg:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
  }
}
 

创建配置

访问AgileConfig容器所在的域名地址和端口8100,首次访问输入2次密码,即可创建admin账号的密码,然后登录进去。

首先创建应用。

然后在应用下面创建配置。

注意要给DEVPROD等多个环境分别创建配置,完成后记得点【发布全部】,每个环境都要发布才会更新配置。

如果多个软件子系统需要共享部分配置,可以新建一个共享配置,打钩【公共应用】。

然后在软件子系统配置中关联这个公共应用的配置文件。

在控制台页面可以清晰看到每个软件子系统,引用了哪些公共配置。

客户端软件接入配置中心

新建Asp.Net Core项目AgileConfigDemoNuGet安装AgileConfig.Client。在软件初始化时添加AgileConfig配置。

D:\Software\gitee\agileconfigdemo\AgileConfigDemo\AgileConfigDemo\Program.cs

 

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseAgileConfig(new ConfigClient($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json"), e => Console.WriteLine($"configs {e.Action}"));

 

确保项目中用的多个环境都有一一对应的appsettings文件,每个appsettings文件引用对应的AgileConfig配置。

D:\Software\gitee\agileconfigdemo\AgileConfigDemo\AgileConfigDemo\appsettings.Development.json

//agile_config
"AgileConfig": {
  "appId": "AgileConfigDemo",
  "secret": "1B25FA68-7D88-4D40-8C85-2DE17FD56C0A",
  "nodes": "https://www.xxx.cn:8100", //多个节点使用逗号分隔,
  "name": "AgileConfigDemo",
  "env": "DEV"
  //"env": "PROD"//本机调试查看产品环境配置
}

D:\Software\gitee\agileconfigdemo\AgileConfigDemo\AgileConfigDemo\appsettings.Production.json

//agile_config
"AgileConfig": {
  "appId": "AgileConfigDemo",
  "secret": "1B25FA68-7D88-4D40-8C85-2DE17FD56C0A",
  "nodes": "https://www.xxx.cn:8100", //多个节点使用逗号分隔,
  "name": "AgileConfigDemo",
  "env": "PROD"
}

在项目中可以跟本机配置一样获取各种配置参数

public class DemoService
{
    private readonly IConfiguration _configuration;

    public DemoService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public string Name => _configuration["Name"];
    public string MaxNameLen => _configuration["MaxNameLen"];
}

运行软件,可以看到控制台输出连接了AgileConfig的信息,并且显示当前使用的是哪个环境的配置文件。

trce: AgileConfig.Client.ConfigClient[0]

      client try connect to server wss://www.xxx.cn:8100/ws?client_name=AgileConfigDemo&client_tag=

trce: AgileConfig.Client.ConfigClient[0]

      client connect server wss://www.xxx.cn:8100/ws?client_name=AgileConfigDemo&client_tag= successful .

trce: AgileConfig.Client.ConfigClient[0]

      client send 'loaded' to server by websocket .

trce: AgileConfig.Client.ConfigClient[0]

      client load all the configs success by API: https://www.xxx.cn:8100/api/config/app/AgileConfigDemo?env=DEV , try count: 0.

 

 

DEMO代码地址:https://gitee.com/woodsun/agileconfigdemo

 

posted on 2024-02-13 13:46  SunnyTrudeau  阅读(268)  评论(0编辑  收藏  举报