Szybki start: dodawanie flag funkcji do usługi działającej w tle w środowisku .NET

W tym przewodniku Szybki start włączysz funkcję zarządzania funkcjami z usługi Azure App Configuration do usługi działającej w tle platformy .NET. Usługa App Configuration służy do centralnego przechowywania flag funkcji i zarządzania nimi.

Wymagania wstępne

Obsługa zarządzania funkcjami rozszerza funkcję konfiguracji dynamicznej w usłudze App Configuration. Przykład w tym przewodniku Szybki start bazuje na aplikacji usługi w tle platformy .NET przedstawionej w samouczku dotyczącym konfiguracji dynamicznej. Przed kontynuowaniem ukończ poniższy samouczek, aby najpierw utworzyć aplikację usługi w tle platformy .NET z konfiguracją dynamiczną.

Dodawanie flagi funkcji

Dodaj flagę funkcji o nazwie Beta do sklepu App Configuration i pozostaw pole Etykieta i Opis z ich wartościami domyślnymi. Aby uzyskać więcej informacji na temat dodawania flag funkcji do sklepu przy użyciu portalu Azure lub interfejsu CLI, zobacz Tworzenie flagi funkcji.

Zrzut ekranu przedstawiający pola umożliwiające włączenie flagi funkcji o nazwie Beta.

Używanie flagi funkcji

  1. Dodaj odwołania do Microsoft.FeatureManagement pakietu NuGet, uruchamiając następujące polecenie:

    dotnet add package Microsoft.FeatureManagement
    
  2. Uruchom następujące polecenie, aby przywrócić pakiety dla projektu:

    dotnet restore
    
  3. Otwórz Program.cs i dodaj następującą instrukcję:

    using Microsoft.FeatureManagement;
    
  4. Dodaj wywołanie metody UseFeatureFlags wewnątrz wywołania AddAzureAppConfiguration i zarejestruj usługi zarządzania funkcjami.

    // Existing code in Program.cs
    // ... ...
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
    
        // 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
    // ... ...
    

    Wskazówka

    Jeśli do metody UseFeatureFlags nie zostanie przekazany żaden parametr, metoda ładuje wszystkie flagi funkcjonalności bez przypisanej etykiety z magazynu App Configuration. Domyślny interwał odświeżania flag funkcji to 30 sekund. To zachowanie można dostosować za pomocą parametru FeatureFlagOptions . Na przykład poniższy fragment kodu ładuje tylko te flagi funkcji, których nazwa klucza zaczyna się od TestApp: i które mają etykietę dev. Kod zmienia również czas interwału odświeżania na 5 minut. Należy pamiętać, że ten interwał odświeżania jest niezależny od interwału dla zwykłych par klucz-wartość.

    options.UseFeatureFlags(featureFlagOptions =>
    {
        featureFlagOptions.Select("TestApp:*", "dev");
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    });
    
  5. Otwórz Worker.cs i dodaj następującą instrukcję:

    using Microsoft.FeatureManagement;
    
  6. Zaktualizuj konstruktor usługi Worker, aby uzyskiwać instancje IConfigurationRefresher i IVariantFeatureManager za pomocą wstrzykiwania zależności.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfigurationRefresher _refresher;
        private readonly IVariantFeatureManager _featureManager;
    
        public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IVariantFeatureManager featureManager)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
            _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager));
        }
    
        // ... ...
    }
    
  7. Zaktualizuj metodę ExecuteAsync, aby rejestrowała komunikat w zależności od stanu flagi funkcjonalności.

    Metoda TryRefreshAsync jest wywoływana na początku każdej iteracji wykonania zadania w celu odświeżenia flagi funkcji. Jeśli nie zostanie osiągnięte okno czasowe interwału odświeżania, nie zostanie wykonana żadna operacja. Operator await nie jest używany, aby flagi funkcji były odświeżane bez blokowania bieżącej iteracji wykonania zadania. W takim przypadku późniejsze iteracje wykonywania zadania otrzymają zaktualizowaną wartość.

    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);
        }
    }
    

Lokalne kompilowanie i uruchamianie aplikacji

  1. Uruchom następujące polecenie, aby skompilować aplikację:

    dotnet build
    
  2. Po pomyślnym zakończeniu kompilacji uruchom następujące polecenie, aby uruchomić aplikację lokalnie:

    dotnet run
    
  3. W konsoli powinny zostać wyświetlone następujące dane wyjściowe.

    Zrzut ekranu konsoli z uruchomioną usługą w tle z wyłączoną flagą funkcji.

  4. Zaloguj się w witrynie Azure Portal. Wybierz Wszystkie zasoby i wybierz magazyn App Configuration, który został wcześniej utworzony.

  5. Wybierz pozycję Menedżer funkcji i znajdź flagę funkcji beta . Włącz flagę, zaznaczając pole wyboru w obszarze Włączone.

  6. Odczekaj kilka chwil, aż upłynie interwał odświeżania. Zostanie wyświetlony zaktualizowany komunikat dziennika.

    Zrzut ekranu konsoli z uruchomioną usługą w tle z włączoną flagą funkcji.

Czyszczenie zasobów

Jeśli nie chcesz nadal korzystać z zasobów utworzonych w tym artykule, usuń utworzoną tutaj grupę zasobów, aby uniknąć naliczania opłat.

Ważne

Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów i wszystkie zasoby w niej są trwale usuwane. Upewnij się, że nie usuniesz przez przypadek niewłaściwej grupy zasobów ani zasobów. Jeśli zasoby dla tego artykułu zostały utworzone w grupie zasobów zawierającej inne zasoby, które chcesz zachować, usuń każdy zasób oddzielnie z odpowiedniego okienka zamiast usuwać grupę zasobów.

  1. Zaloguj się do witryny Azure Portal i wybierz pozycję Grupy zasobów.
  2. W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
  3. Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
  4. Wybierz pozycję Usuń grupę zasobów.
  5. Zostaniesz poproszony o potwierdzenie usunięcia grupy zasobów. Wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.

Po kilku chwilach grupa zasobów i wszystkie jej zasoby zostaną usunięte.

Następne kroki

W tym przewodniku Szybki start utworzono flagę funkcji i użyto jej w usłudze działającej w tle.

Aby włączyć funkcję zarządzania funkcjami dla innych typów aplikacji, przejdź do następujących samouczków.

Aby dowiedzieć się więcej o zarządzaniu flagami funkcji w usłudze Azure App Configuration, przejdź do poniższego samouczka.

Aby uruchomić pełną funkcję biblioteki zarządzania funkcjami platformy .NET, przejdź do następującego dokumentu.