寫在前面
在日常開發中,我這邊比較熟悉的配置中心有,攜程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)

點這個create

添加資源分組服務名稱

資源分組就是當前創建這個服務的所在的分組(沒有點擊Create new)
服務名稱就是當前創建服務名稱
創建后稍等一會就可以用了;
新增一些測試配置

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?stringconfig.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配置

讀取配置的整個對象
對象key這樣配置:
AzureStorageConfig1:ConnectionString
AzureStorageConfig1:ContainerName
...

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設置環境變量:

這樣TestKey1
只有在對應環境變量才有值,TestKey2
在所有環境變量都有值(空Label);
測試
這里簡單測下Development環境的

總結
目前只是一個非常簡單的集成,可以看到集成是非常簡單的。后面我們再講下怎么主動更新配置,怎樣啟用功能開關等其他高級特性;
另外,我們這里測試都是手填配置到Azure管理后臺,其實它也是支持配置的導入導出的,無需擔心;
源碼
https://github.com/gebiWangshushu/Hei.Azure.Test
[參考]
https://docs.microsoft.com/en-us/azure/azure-app-configuration/overview