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"];           
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章