微軟Azure配置中心 App Configuration (一):輕鬆集成到Asp.Net Core

What is Azure App Configuration? - DevOpsSchool.com

寫在前面

在日常開發中,我這邊比較熟悉的配置中心有,攜程Apollo,阿里Nacos(配置中心,服務治理一體)

之前文章:

Asp.Net Core與攜程阿波羅(Apollo)的第一次親密接觸

總體來說,Apollo和Nacos社區都比較活躍,可能是後發優勢或者我們技術選型的原因,我們生產選用的是Nacos,我個人也是優先推薦Nacos(熟悉點,集成方便)。不管怎麼說兩者都是比較不錯的配置中心;

今天我帶來了另一個配置中心:微軟Azure App Configuration,希望給大家帶來一點技術選型上的幫助;

本文先講講微軟Azure配置中心 App Configuration 在Asp.Net Core中的集成;

本文假設你有一點點微軟雲Azure的瞭解,能創建和使用基本的服務,能大概知道什麼是雲平臺;

沒有Azure的話找個雙幣信用卡去開一個免費的(免費12個月);

先在Azure雲管理界面創建一個AppConfiguration

[Azure 管理後臺]搜索找到App Configuration(我這裏是世紀互聯的)

https://portal.azure.cn/#home)

1658678405153

點這個create

1658678449949

添加資源分組服務名稱

1658678571794

  1. 資源分組就是當前創建這個服務的所在的分組(沒有點擊Create new)
  2. 服務名稱就是當前創建服務名稱

創建後稍等一會就可以用了;

新增一些測試配置

1658678882520

OK,目前服務創建成功,且寫入了一些測試配置,後面看看怎麼在Asp.net Core裏面用了;

在Asp.Net Core中集成

基本使用

1、先隨便創建一個WebApi服務(我這裏用net6)

勾選啓用swagger

2、安裝nuget

install-package Microsoft.Azure.AppConfiguration.AspNetCore

3、appsetting.json加入連接字符串

  "ConnectionStrings": {
    "AppConfig": "<your app connection string >"
  },

4、修改Program.cs

var connectionString = builder.Configuration.GetConnectionString("AppConfig");

builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{
    ////簡單使用只配置connection string
    config.AddAzureAppConfiguration(connectionString);
});

5、使用

創建AzureConfigController

AzureConfigController
 [Route("api/azure/config/[action]")]
    public class AzureConfigController : PassportApiController
    {
        private readonly ILogger _logger;
        private readonly IConfiguration _configuration;
        private readonly Settings _settings;

        public AzureConfigController(IConfiguration configuration, IAzureStorageApi azureStorageApi, IOptionsSnapshot<Settings> settings)
        {
            _configuration = configuration;
            _settings = settings.Value;
        }

        /// <summary>
        /// 讀取配置string
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult Get(string key)
        {
            var result = _configuration[key];

            return Success("get config success", result);
        }

        /// <summary>
        /// 讀取配置對象
        /// </summary>
        /// <param name="key">The key.</param>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> GetObject(string key)
        {
            var result = _configuration.GetSection(key).Get<AzureStorageConfig>();

            return Success("get config success", result);
        }
    }

讀取string配置

1658682672067

讀取配置的整個對象

對象key這樣配置:

AzureStorageConfig1:ConnectionString

AzureStorageConfig1:ContainerName

...

1658682780333

ok,就這麼簡單~

根據環境變量讀取配置

我們一般Asp.Net Core Web應用程序是用環境變量去加載不同配置的,一般我們的配置這樣:

appsettings.json
appsettings.<HostEnvironment>.json

同一個key的配置在不同Development和Production環境是可以不一樣的。

在Azure App Configuration ,引入一個Label的概念來實現;

修改集成代碼:

builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{
    ////簡單使用只配置connection string
    //config.AddAzureAppConfiguration(connectionString);

    //配置不同功能
    config.AddAzureAppConfiguration(options =>
    {
        //啓用Label(多環境)支持
        options.Connect(connectionString)
            .Select(KeyFilter.Any, LabelFilter.Null)//配置過濾器,讀取空Lable的配置
            .Select(KeyFilter.Any, hostingContext.HostingEnvironment.EnvironmentName); //配置過濾器,只讀取某個環境的配置
    });
});

管理後臺給一個Key設置環境變量:

1658765273187

這樣TestKey1只有在對應環境變量纔有值,TestKey2在所有環境變量都有值(空Label);

測試

這裏簡單測下Development環境的

1658765390285

總結

目前只是一個非常簡單的集成,可以看到集成是非常簡單的。後面我們再講下怎麼主動更新配置,怎樣啓用功能開關等其他高級特性;

另外,我們這裏測試都是手填配置到Azure管理後臺,其實它也是支持配置的導入導出的,無需擔心;

源碼

https://github.com/gebiWangshushu/Hei.Azure.Test

[參考]

https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章