在本快速入門中,您會將 Azure 應用程式組態的功能管理功能併入 .NET 背景服務中。 您可使用應用程式組態來集中儲存和管理功能旗標。
必要條件
功能管理支援會擴充應用程式組態中的動態設定功能。 本快速入門中的範例建置基礎是在動態設定教學課程中介紹過的 .NET 背景服務應用程式。 繼續之前,請先完成下列教學課程,以使用動態設定建立 .NET 背景服務應用程式。
新增功能旗標
將名為 Beta 的功能旗標新增至應用程式組態存放區,並保留標籤和描述的預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至建立功能旗標。
啟用功能旗標
透過執行下列命令,將參考新增至
Microsoft.FeatureManagement
NuGet 套件:dotnet add package Microsoft.FeatureManagement
執行下列命令以還原您專案的套件:
dotnet restore
開啟 Program.cs,並新增下列陳述式:
using Microsoft.FeatureManagement;
在
AddAzureAppConfiguration
呼叫內新增對UseFeatureFlags
方法的呼叫,以及註冊功能管理服務。// Existing code in Program.cs // ... ... builder.Configuration.AddAzureAppConfiguration(options => { string endpoint = Environment.GetEnvironmentVariable("Endpoint"); options.Connect(new Uri(endpoint), new DefaultAzureCredential()); // Use feature flags options.UseFeatureFlags(); // Register the refresher so that the Worker service can consume it through dependency injection builder.Services.AddSingleton(options.GetRefresher()); }); // Register feature management services builder.Services.AddFeatureManagement(); // The rest of existing code in Program.cs // ... ...
提示
當沒有任何參數傳遞至
UseFeatureFlags
方法時,它會載入應用程式設定存放區中「所有無標籤」的功能旗標。 功能旗標的預設重新整理的間隔是 30 秒。 您可以透過FeatureFlagOptions
參數自訂此行為。 例如,下列程式碼片段只會載入「機碼名稱」中以 TestApp: 開頭,且標籤為 dev 的功能旗標。 程式碼也會將重新整理的間隔時間變更為 5 分鐘。 請注意,此重新整理的間隔時間與一般的索引鍵值不同。options.UseFeatureFlags(featureFlagOptions => { featureFlagOptions.Select("TestApp:*", "dev"); featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5); });
開啟 Worker.cs,並新增下列陳述式:
using Microsoft.FeatureManagement;
更新
Worker
服務的建構函式,以透過相依性插入取得IConfigurationRefresher
和IVariantFeatureManager
的執行個體。public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly IConfigurationRefresher _refresher; private readonly IVariantFeatureManager _featureManager; public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IVariantFeatureManager featureManager) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher)); _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager)); } // ... ... }
更新
ExecuteAsync
方法,根據功能旗標的狀態來記錄訊息。TryRefreshAsync
方法會在工作執行的每次反覆運算開始時呼叫,以重新整理功能旗標。 如果未達到重新整理間隔時間範圍,則不會執行任何作業。 不會使用await
運算子,以便重新整理功能旗標,而不需封鎖工作執行的目前反覆運算。 在此情況下,工作執行的稍後反覆運算將取得更新的值。protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // Intentionally not await TryRefreshAsync to avoid blocking the execution. _refresher.TryRefreshAsync(stoppingToken); if (_logger.IsEnabled(LogLevel.Information)) { if (await _featureManager.IsEnabledAsync("Beta")) { _logger.LogInformation("[{time}]: Worker is running with Beta feature.", DateTimeOffset.Now); } else { _logger.LogInformation("[{time}]: Worker is running.", DateTimeOffset.Now); } } await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } }
於本機建置並執行應用程式
執行下列命令以建置應用程式:
dotnet build
建置成功完成後,請執行下列命令以於本機執行應用程式:
dotnet run
您應該會在主控台中看到下列輸出。
登入 Azure 入口網站。 選取 [所有資源],然後選取您之前建立的應用程式設定存放區。
選取 [功能管理員],找到 Beta 功能旗標。 選取 [啟用] 下的核取方塊,以啟用旗標。
請稍候片刻,讓重新整理間隔時間範圍過去。 您會看到已更新的記錄訊息。
清除資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選取 [刪除資源群組]。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
下一步
在本快速入門中,您已建立功能旗標並搭配背景服務使用它。
若要啟用其他類型應用程式的功能管理功能,請繼續下列教學課程。
若要深入了解如何在 Azure 應用程式設定中管理功能旗標,請繼續下列教學課程。
如需 .NET 功能管理程式庫的完整功能摘要,請繼續參閱下列文件。