Asp.Net Core&Agile Config配置中心


當服務逐漸的增多,對各服務的配置管理愈加重要,輕量級的配置中心,入手或是搭建都簡單許多,基於.net core開發的輕量級配置中心AgileConfig,功能強大,上手簡單。

https://github.com/dotnetcore/AgileConfig

AgileConfig架構圖

圖片

AgileConfig配置端搭建

1、新建一個文件夾用來作為配置存儲

mkdir agileconfig

2、新開數據庫&配置賬戶名
3、下載鏡像&創建容器

AgileConfig支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五種數據庫。依照實際使用的數據庫類型選擇,此處我這使用mysql。

sudo docker run \
 --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 /agileconfig:/app/db \
 -d \
 kklldog/agile_config:latest
  • name:容器名,給定個容器名。
  • TZ:指定時區。
  • adminConsole:配置程序是否使用管理控制台。
    • 如果為true則啟用控制台功能,訪問該實例會出現管理界面。
    • 每個實例都可以選擇使用管理界面,共用一套數據源只是呈現端口不同
    • 默認賬號為admin,首次登錄需要設置密碼,設置后多個管理界面都可以通用
  • db:provider:配置程序的數據庫類型。
    • 目前程序支持:sqlite,mysql,sqlserver,npgsql, oracle 五種數據庫。
    • 按照項目中允許的數據庫使用即可。
    • 首個節點啟動后會創建數據表(相當好~)。
    • db:env:{env}:provider,可以指定特定環境下使用某個數據庫,如db:env:PROD.provider=sqlserver, db:env:DEVELOPMENT.provider=mysql
  • db:conn:配置數據庫連接串。
    • 按照不同的數據庫類型設置不同的數據庫連接字符串。
    • 數據庫使用第二步創建的庫。
    • 默認內置了 DEV, TEST, STAGING, PROD 四個常用的環境,如不夠,可直接操作agc_setting 表,增加自定義環境。
    • db:env:{env}:conn,可以指定特定環境下使用某個數據庫,如db:env:PROD.conn=xxx, db:env:DEVELOPMENT.conn=xxx
  • p:指定對外端口,用戶客戶端去連接。
    • 設置允許使用的對外端口即可。
  • v:節點的數據卷掛載
    • 此處掛載到第一步設置的文件夾路徑下,可按實際需要設置掛載路徑或是不設置-v參數也行。
  • -d:后台運行

4、打開地址,配置默認賬號admin的密碼

圖片

5、節點管理

首個節點進入管理界面后,可以將自身加入到節點列表中。

圖片

可以在節點列表中增加節點,這樣方便所有節點可以統一管理。

圖片

客戶端設置

1、在需要管理配置的項目中增加Nuget包,以接入AgileConfig配置端

Install-Package AgileConfig.Client

2、在AgileConfig配置端注冊客戶端信息
圖片

3、在appsettings.json增加連接AgileConfig的節點,將第二步中的ID和密鑰填入配置中,設置連接的配置端節點,可以設置多個節點,隨機連接一個節點。

{
  "AgileConfig": {
    "appId": "app",
    "secret": "xxx",
    "nodes": "http://localhost:9527,http://localhost:9528"//多個節點使用逗號分隔,
    "name": "client_name",
    "tag": "tag1",
    "env": "DEV"
  }
}

當某個節點不可用,客戶端會切換到其他節點,所有節點不可用,使用內存緩存配置或是讀取本地文件緩存配置。
圖片

4、在Program設置使用AgileConfig,如此增加環境后,AgileConfigProvider便會從相應環境appsettings.json中讀取上述配置

.ConfigureAppConfiguration((context, config) =>
{
    var envName = context.HostingEnvironment.EnvironmentName;
    var configClient = new ConfigClient($"appsettings.{envName}.json");
    config.AddAgileConfig(configClient, arg => Console.WriteLine($"config changed , action:{arg.Action} key:{arg.Key}"));
})

在Startup中添加服務

services.AddAgileConfig();

5、設置需要讀取配置的代碼,按照AspNetCore讀取配置的方式即可,啟動客戶端

[Route("api/[controller]")]
[ApiController]
public class HealthController : ControllerBase
{
    private readonly ILogger<HealthController> _logger;
    private readonly IConfiguration _configuration;

    public HealthController(ILogger<HealthController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    [HttpGet]
    [Route("Index")]
    public IActionResult Index()
    {
        _logger.LogWarning($"This is HealthController {_configuration["Port"]}.");
        return Ok();
    }
}

6、AgileConfig配置端配置,按照json格式設置,新建或是編輯已有配置或是導入json文件或數據等都行,點擊發布則下發到各連接的客戶端中。
圖片

發布完畢,再次請求便是最新的配置信息,作為配置中心提供的熱加載提供了更多的靈活度。

圖片

7、在配置端這邊還有許多功能,如對客戶端的管理,客戶端連接的查看等,配置項歷史記錄,版本回滾等,系統日志方便追蹤多端間連接問題,以及配置端的用戶管理等。

圖片

配置讀取優先級

如果在AgileConfig中有則默認從那取值,沒有再去找機密文件,再去找appsettings.{env}.json,最后appsettings.json,當然優先級最高的還是環境變量和命令行的配置(AgileConfig中沒有值情況下)。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0#default-configuration

作為.Net中的輪子,我是挺喜歡用這個的,搭建上手理解都極為方便,功能強大,操作簡便,同時部署起來也是極為輕松,資源占有少,皮膚也漂亮(相比Apollo)。

AgileConfig大佬地址:https://www.cnblogs.com/kklldog/p/agile-config.html
AgileConfig地址:https://github.com/dotnetcore/AgileConfig

2021-12-27,望技術有成后能回來看見自己的腳步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM