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个环境变量需要配置:

  1. adminConsole 配置程序是否为管理控制台。如果为true则启用控制台功能,访问该实例会出现管理界面。
  2. db__provider 配置程序的数据库类型。目前程序支持:sqlserver,mysql,sqlite, PostgreSql,Oracle 五种数据库。
  3. 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"];           
        }
    }
}
posted @ 2022-12-09 17:51  雨水的命运  阅读(551)  评论(0编辑  收藏  举报