Краткое руководство. Добавление флагов функций в фоновую службу .NET
В этом кратком руководстве описано, как включить возможности управления функциями из Конфигурация приложений Azure в фоновую службу .NET. Вы используете Конфигурация приложений для централизованного хранения флагов функций и управления ими.
Необходимые компоненты
Поддержка управления функциями расширяет функцию динамической конфигурации в Конфигурация приложений. Пример в этом кратком руководстве основан на приложении фоновой службы .NET, представленном в руководстве по динамической конфигурации. Прежде чем продолжить, выполните следующее руководство, чтобы создать приложение фоновой службы .NET с динамической конфигурацией.
Добавление флага компонента
Добавьте флаг компонента с именем Beta в хранилище Конфигурация приложений и оставьте метку и описание со значениями по умолчанию. Дополнительные сведения о добавлении флагов компонентов в хранилище с помощью портал Azure или интерфейса командной строки см. в разделе "Создание флага функции".
Использование флага компонента
Добавьте ссылки на
Microsoft.FeatureManagement
пакет NuGet, выполнив следующую команду:dotnet add package Microsoft.FeatureManagement
Выполните следующую команду, чтобы восстановить пакеты проекта:
dotnet restore
Откройте Program.cs и добавьте следующую инструкцию:
using Microsoft.FeatureManagement;
Добавьте вызов
UseFeatureFlags
метода в службах управления функциямиAddAzureAppConfiguration
вызова и регистрации.// 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: в имени ключа и разработки меток. Код также изменяет время обновления на 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
вызывается в начале каждой итерации выполнения задачи для обновления флага компонента. Это будет no-op, если интервал обновления не достигнут. Оператор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. Выберите все ресурсы и выберите хранилище Конфигурация приложений, созданное ранее.
Выберите диспетчер компонентов и найдите флаг бета-функции . Включите флаг, выбрав флажок в разделе "Включено".
Подождите несколько минут, пока интервал обновления истекает. Появится обновленное сообщение журнала.
Очистка ресурсов
Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.
Внимание
Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.
- Войдите на портал Azure и выберитеГруппы ресурсов.
- Введите имя группы ресурсов в поле Фильтровать по имени.
- В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
- Выберите команду Удалить группу ресурсов.
- Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.
Через некоторое время группа ресурсов и все ее ресурсы будут удалены.
Следующие шаги
В этом кратком руководстве вы создали флаг компонента и использовали его с фоновой службой.
Чтобы включить возможности управления функциями для других типов приложений, перейдите к следующим руководствам.
Дополнительные сведения об управлении флагами функций в Конфигурация приложений Azure см. в следующем руководстве.
Для полного запуска функции библиотеки управления функциями .NET перейдите к следующему документу.