快速入門:將功能旗標新增至 .NET 背景服務

在本快速入門中,您會將 Azure 應用程式組態的功能管理功能併入 .NET 背景服務中。 您可使用應用程式組態來集中儲存和管理功能旗標。

必要條件

功能管理支援會擴充應用程式組態中的動態設定功能。 本快速入門中的範例建置基礎是在動態設定教學課程中介紹過的 .NET 背景服務應用程式。 繼續之前,請先完成下列教學課程,以使用動態設定建立 .NET 背景服務應用程式。

新增功能旗標

將名為 Beta 的功能旗標新增至應用程式組態存放區,並保留標籤描述的預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至建立功能旗標

此螢幕擷取畫面顯示欄位以啟用名為 Beta 的功能旗標。

啟用功能旗標

  1. 透過執行下列命令,將參考新增至 Microsoft.FeatureManagement NuGet 套件:

    dotnet add package Microsoft.FeatureManagement
    
  2. 執行下列命令以還原您專案的套件:

    dotnet restore
    
  3. 開啟 Program.cs,並新增下列陳述式:

    using Microsoft.FeatureManagement;
    
  4. AddAzureAppConfiguration 呼叫內新增對 UseFeatureFlags 方法的呼叫,以及註冊功能管理服務。

    // Existing code in Program.cs
    // ... ...
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"));
    
        // 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);
    });
    
  5. 開啟 Worker.cs,並新增下列陳述式:

    using Microsoft.FeatureManagement;
    
  6. 更新 Worker 服務的建構函式,以透過相依性插入取得 IConfigurationRefresherIFeatureManager 的執行個體。

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfigurationRefresher _refresher;
        private readonly IFeatureManager _featureManager;
    
        public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IFeatureManager featureManager)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
            _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager));
        }
    
        // ... ...
    }
    
  7. 更新 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);
        }
    }
    

於本機建置並執行應用程式

  1. 執行下列命令以建置應用程式:

    dotnet build
    
  2. 建置成功完成後,請執行下列命令以於本機執行應用程式:

    dotnet run
    
  3. 您應該會在主控台中看到下列輸出。

    主控台的螢幕擷取畫面,其中背景服務在停用功能旗標的情況下執行。

  4. 登入 Azure 入口網站。 選取 [所有資源],然後選取您之前建立的應用程式設定存放區。

  5. 選取 [功能管理員],找到 Beta 功能旗標。 選取 [啟用] 下的核取方塊,以啟用旗標。

  6. 請稍候片刻,讓重新整理間隔時間範圍過去。 您會看到已更新的記錄訊息。

    主控台的螢幕擷取畫面,其中背景服務在啟用功能旗標的情況下執行。

清除資源

如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。

重要

刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。

  1. 登入 Azure 入口網站,然後選取 [資源群組]
  2. 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
  3. 在結果清單中,選取資源群組名稱以查看概觀。
  4. 選取 [刪除資源群組]
  5. 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]

不久後,系統便會刪除該資源群組及其所有的資源。

下一步

在本快速入門中,您已建立功能旗標並搭配背景服務使用它。

若要啟用其他類型應用程式的功能管理功能,請繼續下列教學課程。

若要深入了解如何在 Azure 應用程式設定中管理功能旗標,請繼續下列教學課程。

如需 .NET 功能管理程式庫的完整功能摘要,請繼續參閱下列文件。