Краткое руководство. Добавление флагов функций в фоновую службу .NET

В этом кратком руководстве описано, как включить возможности управления функциями из Конфигурация приложений Azure в фоновую службу .NET. Вы используете Конфигурация приложений для централизованного хранения флагов функций и управления ими.

Необходимые компоненты

Поддержка управления функциями расширяет функцию динамической конфигурации в Конфигурация приложений. Пример в этом кратком руководстве основан на приложении фоновой службы .NET, представленном в руководстве по динамической конфигурации. Прежде чем продолжить, выполните следующее руководство, чтобы создать приложение фоновой службы .NET с динамической конфигурацией.

Добавление флага компонента

Добавьте флаг компонента с именем Beta в хранилище Конфигурация приложений и оставьте метку и описание со значениями по умолчанию. Дополнительные сведения о добавлении флагов компонентов в хранилище с помощью портал Azure или интерфейса командной строки см. в разделе "Создание флага функции".

Снимок экрана: поля для включения флага компонента с именем Beta.

Использование флага компонента

  1. Добавьте ссылки на Microsoft.FeatureManagement пакет NuGet, выполнив следующую команду:

    dotnet add package Microsoft.FeatureManagement
    
  2. Выполните следующую команду, чтобы восстановить пакеты проекта:

    dotnet restore
    
  3. Откройте Program.cs и добавьте следующую инструкцию:

    using Microsoft.FeatureManagement;
    
  4. Добавьте вызов 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);
    });
    
  5. Откройте Worker.cs и добавьте следующую инструкцию:

    using Microsoft.FeatureManagement;
    
  6. Обновите конструктор 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));
        }
    
        // ... ...
    }
    
  7. 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);
        }
    }
    

Создание и запуск приложения локально

  1. Выполните сборку приложения с помощью следующей команды:

    dotnet build
    
  2. Когда создание завершится, запустите приложение локально с помощью следующей команды:

    dotnet run
    
  3. В консоли должны появиться следующие выходные данные.

    Снимок экрана: консоль с фоновой службой, работающей с отключенным флагом компонента.

  4. Войдите на портал Azure. Выберите все ресурсы и выберите хранилище Конфигурация приложений, созданное ранее.

  5. Выберите диспетчер компонентов и найдите флаг бета-функции . Включите флаг, выбрав флажок в разделе "Включено".

  6. Подождите несколько минут, пока интервал обновления истекает. Появится обновленное сообщение журнала.

    Снимок экрана: консоль с фоновой службой, работающей с включенным флагом компонента.

Очистка ресурсов

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги

В этом кратком руководстве вы создали флаг компонента и использовали его с фоновой службой.

Чтобы включить возможности управления функциями для других типов приложений, перейдите к следующим руководствам.

Дополнительные сведения об управлении флагами функций в Конфигурация приложений Azure см. в следующем руководстве.

Для полного запуска функции библиотеки управления функциями .NET перейдите к следующему документу.