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