針對 App Configuration 主題還有一些在之前文章主題之外的一些補充筆記。主要有兩個補充的部分,一個是針對設定自動重新重整新設定,另一個是在「使用 App Configuration 的 Feature manager 功能來實做 Feature Toggle/Flag 機制」主要說明都是使用到內建的 Filter,如果是完全自訂的話就要另外實做自訂的 Filter 來使用。
實做
設定重新整理參數
在程式如果沒有特別設定,就只會在程式執行的時候去讀取 App Configuration,這樣在 ASP.Net 程式的時候假設修改參數,就得重新啟用站台而導致網站會暫時中斷,這時候就可已設定註冊監控一個參數,當參數值有變化的時候,程式就會重新讀取參數了,而只設定一個參數的好處是當我們有修改多個參數的時候,可能有些會有相依性,就可以在全部都調整好之後,最後再設定監控的參數值來觸發重新讀取全部參數,避免參數還沒完全調整完導致程式產生錯誤。
首先新增一個參數 Version 作為程式版號以及監控參數的值,這樣就可以在程式佈版完成之後設定新的版號來觸發重新讀取參數。
接下來在 Program.cs 連接設定的地方透過加上 ConfigureRefresh 這個設定值來設定監控和快取的時間。
builder.Host.ConfigureAppConfiguration(builder =>
{
builder.AddAzureAppConfiguration(options => options
.Connect(appConfigConnectionString)
.ConfigureRefresh(refreshOptions =>
{
refreshOptions.Register("Version", refreshAll: true);
refreshOptions.SetCacheExpiration(TimeSpan.FromSeconds(1));
})
.UseFeatureFlags());
});
底下這一行就是設定要監控的參數,並且設定當有變動的時候就全部參數都重新讀取。
refreshOptions.Register("Version", refreshAll: true);
另一航程式則為設定參數快取的時間,預設是 30 秒,每隔 30 秒就會去確認監控的參數是否有更新,底下範例則為設定為每秒,但是不建議設定時間這麼短,因為會讓程式讀取參數頻率變高,而費用計算又是用呼叫次數,這樣就容易產生較高的費用。
refreshOptions.SetCacheExpiration(TimeSpan.FromSeconds(1));
如果前面沒有注入 AzureAppConfiguration 的話也要加上去。
builder.Services.AddAzureAppConfiguration();
後面也要加上使用 AzureAppConfiguration 的 Middleware。
app.UseAzureAppConfiguration();
這樣就都設定好了,之後需要觸發重新讀取參數的時候只要去修改 Version 的值就可以了。
自訂 FeatureFilter
假設內建的 FeatureFilter 還是不夠我們使用,想要有更大的彈性來使用,就可以完全的來自訂 FeatureFilter,首先新增一個 Feature,並在 FeatureFilter 選擇 Custom,並且設定一個參數名稱為 Para1。
接下來新增一個 CustomFeatureFilter 並且繼承 IFeatureFilter
,接下來實做 EvaluateAsync
方法,簡單的去讀取參數並且判斷值是特定的字串,最後回傳是否啟用的 bool 參數即可。
[FilterAlias("AnYunCustom")]
public class CustomFeatureFilter : IFeatureFilter
{
public Task<bool> EvaluateAsync(FeatureFilterEvaluationContext context)
{
var isEnabled = false;
var para1 = context.Parameters.GetValue<string>("Para1");
if (para1 == "AnYun")
isEnabled = true;
return Task.FromResult(isEnabled);
}
}
接下來在 Program.cs 中設定注入。
builder.Services.AddFeatureManagement().AddFeatureFilter<CustomFeatureFilter>();
這樣在程式裡面就可以使用這一個 FeatureFilter 了。
其它 Controller 和 View 的修改就和前面文章介紹一樣,可就不多做說明,可以到 GitHub 看完整範例。
結論
陸續寫了好幾篇的 App Configuration 主題,應該把主要實務上常會用到的功能跟情境都介紹了,剩下就是看需求來使用這一個 Azure 好用的服務了。
參考資料