快速入门:向 .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 功能管理库的完整功能概要,请继续阅读以下文档。