快速入门:向 .NET 后台服务添加功能标志
在本快速入门中,你会将 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 => { 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); });
打开 Worker.cs 并添加以下语句:
using Microsoft.FeatureManagement;
更新
Worker
服务的构造函数,以通过依赖项注入获取IConfigurationRefresher
和IFeatureManager
的实例。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)); } // ... ... }
更新
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 功能管理库的完整功能概要,请继续阅读以下文档。