Dela via


Snabbstart: Lägga till funktionsflaggor i en .NET-bakgrundstjänst

I den här snabbstarten införlivar du funktionen för funktionshantering från Azure App Configuration i en .NET-bakgrundstjänst. Du använder App Configuration för att lagra och hantera dina funktionsflaggor centralt.

Förutsättningar

Stöd för funktionshantering utökar funktionen för dynamisk konfiguration i App Configuration. Exemplet i den här snabbstarten bygger på .NET-bakgrundstjänstappen som introducerades i självstudien för dynamisk konfiguration. Innan du fortsätter slutför du följande självstudie för att skapa en .NET-bakgrundstjänstapp med dynamisk konfiguration först.

Lägga till en funktionsflagga

Lägg till en funktionsflagga med namnet Beta i App Configuration Store och lämna Etikett och Beskrivning med sina standardvärden. Mer information om hur du lägger till funktionsflaggor i en butik med hjälp av Azure Portal eller CLI finns i Skapa en funktionsflagga.

Skärmbild som visar fält för att aktivera en funktionsflagga med namnet Beta.

Använda funktionsflaggan

  1. Lägg till referenser till Microsoft.FeatureManagement NuGet-paketet genom att köra följande kommando:

    dotnet add package Microsoft.FeatureManagement
    
  2. Kör följande kommando för att återställa paket för projektet:

    dotnet restore
    
  3. Öppna Program.cs och lägg till följande instruktion:

    using Microsoft.FeatureManagement;
    
  4. Lägg till ett anrop till UseFeatureFlags metoden i anropet AddAzureAppConfiguration och registrera funktionshanteringstjänster.

    // 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
    // ... ...
    

    Dricks

    När ingen parameter skickas till UseFeatureFlags metoden läses alla funktionsflaggor in utan etikett i appkonfigurationsarkivet. Standarduppdateringsintervallet för funktionsflaggor är 30 sekunder. Du kan anpassa det här beteendet via parametern FeatureFlagOptions . Följande kodfragment läser till exempel bara in funktionsflaggor som börjar med TestApp: i deras nyckelnamn och har etiketten dev. Koden ändrar även uppdateringsintervalltiden till 5 minuter. Observera att den här uppdateringsintervalltiden är separat från den för vanliga nyckelvärden.

    options.UseFeatureFlags(featureFlagOptions =>
    {
        featureFlagOptions.Select("TestApp:*", "dev");
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    });
    
  5. Öppna Worker.cs och lägg till följande instruktion:

    using Microsoft.FeatureManagement;
    
  6. Uppdatera konstruktorn för Worker tjänsten för att hämta instanser av IConfigurationRefresher och IVariantFeatureManager via beroendeinmatning.

    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. ExecuteAsync Uppdatera metoden för att logga ett meddelande beroende på funktionsflaggans tillstånd.

    Metoden TryRefreshAsync anropas i början av varje iteration av aktivitetskörningen för att uppdatera funktionsflaggan. Det blir en no-op om tidsperioden för uppdateringsintervallet inte nås. Operatorn await används inte så att funktionsflaggor uppdateras utan att den aktuella iterationen av aktivitetskörningen blockeras. I så fall kommer senare iterationer av aktivitetskörningen att få ett uppdaterat värde.

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

Skapa och köra appen lokalt

  1. Skapa appen genom att köra följande kommando:

    dotnet build
    
  2. När bygget har slutförts kör du följande kommando för att köra appen lokalt:

    dotnet run
    
  3. Du bör se följande utdata i konsolen.

    Skärmbild av konsolen med en bakgrundstjänst som körs med funktionsflaggan inaktiverad.

  4. Logga in på Azure-portalen. Välj Alla resurser och välj appkonfigurationsarkivet som du skapade tidigare.

  5. Välj Funktionshanterare och leta upp flaggan Beta-funktion . Aktivera flaggan genom att markera kryssrutan under Aktiverad.

  6. Vänta en stund tills tidsperioden för uppdateringsintervallet har passerat. Du ser det uppdaterade loggmeddelandet.

    Skärmbild av konsolen med en bakgrundstjänst som körs med funktionsflaggan aktiverad.

Rensa resurser

Om du inte vill fortsätta använda resurserna som skapas i den här artikeln tar du bort resursgruppen som du skapade här för att undvika avgifter.

Viktigt!

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte oavsiktligt tar bort fel resursgrupp eller resurser. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure Portal och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.

Nästa steg

I den här snabbstarten skapade du en funktionsflagga och använde den med en bakgrundstjänst.

Om du vill aktivera funktioner för funktionshantering för andra typer av appar fortsätter du till följande självstudier.

Om du vill veta mer om hur du hanterar funktionsflaggor i Azure App Configuration fortsätter du till följande självstudie.

Fortsätt till följande dokument för den fullständiga funktionskörningen i .NET-funktionshanteringsbiblioteket.