Dela via


Självstudie: Använda dynamisk konfiguration i en .NET-bakgrundstjänst

Data från App Configuration kan läsas in som appinställningar i ett .NET-program. Mer information finns i snabbstarten. Som är utformat av .NET kan appinställningarna dock bara uppdateras när programmet startas om. .NET-providern för appkonfiguration är ett .NET Standard-bibliotek. Den stöder cachelagring och uppdatering av konfigurationen dynamiskt utan omstart av programmet. Den här självstudien visar hur du kan implementera dynamiska konfigurationsuppdateringar i en .NET-bakgrundstjänst.

I den här självstudien lär du dig att:

  • Konfigurera .NET-bakgrundstjänsten för att uppdatera konfigurationen som svar på ändringar i ett appkonfigurationsarkiv.
  • Använd den senaste konfigurationen i bakgrundstjänsten.

Förutsättningar

Lägga till ett nyckelvärde

Lägg till följande nyckelvärde i appkonfigurationsarkivet och lämna Etikett och innehållstyp med sina standardvärden. Mer information om hur du lägger till nyckelvärden i ett arkiv med hjälp av Azure Portal eller CLI finns i Skapa ett nyckelvärde.

Tangent Värde
TestApp:Settings:Message Data från Azure App Configuration

Skapa en .NET-bakgrundstjänst

Du använder .NET-kommandoradsgränssnittet (CLI) för att skapa ett nytt .NET-appprojekt. Fördelen med att använda .NET CLI över Visual Studio är att det är tillgängligt på Windows-, macOS- och Linux-plattformarna. Du kan också använda de förinstallerade verktygen som är tillgängliga i Azure Cloud Shell.

  1. Skapa en ny mapp för ditt projekt.

  2. I den nya mappen kör du följande kommando för att skapa ett nytt .NET-bakgrundstjänstprojekt:

    dotnet new worker
    

Läsa in data på nytt från App Configuration

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

    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  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 instruktioner:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Anslut till App Configuration med Hjälp av Microsoft Entra-ID (rekommenderas) eller en anslutningssträng.

    Du använder för att autentisera DefaultAzureCredential till appkonfigurationsarkivet. Följ anvisningarna för att tilldela dina autentiseringsuppgifter rollen App Configuration Data Reader. Se till att ge tillräckligt med tid för att behörigheten ska spridas innan du kör programmet.

    // Existing code in Program.cs
    // ... ...
    
    var builder = Host.CreateApplicationBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
            // Load all keys that start with `TestApp:`.
            .Select("TestApp:*")
            // Configure to reload the key 'TestApp:Settings:Message' if it is modified.
            .ConfigureRefresh(refreshOptions =>
            {
                refreshOptions.Register("TestApp:Settings:Message");
            });
    
        // Register the refresher so that the Worker service can consume it through DI
        builder.Services.AddSingleton(options.GetRefresher());
    });
    
    // The rest of existing code in Program.cs
    // ... ...
    

    ConfigureRefresh I metoden registreras en nyckel i appkonfigurationsarkivet för ändringsövervakning. Metoden Register har en valfri boolesk parameter refreshAll som kan användas för att ange om alla konfigurationsvärden ska uppdateras om den registrerade nyckeln ändras. I det här exemplet uppdateras bara nyckeln TestApp:Settings:Message . Alla inställningar som registrerats för uppdatering har en standardtid på 30 sekunder innan en ny uppdatering görs. Den kan uppdateras genom att anropa AzureAppConfigurationRefreshOptions.SetCacheExpiration metoden.

  5. Öppna Worker.cs. Mata in IConfiguration och IConfigurationRefresher till Worker tjänsten och logga konfigurationsdata från App Configuration.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfiguration _configuration;
        private readonly IConfigurationRefresher _refresher;
    
        public Worker(ILogger<Worker> logger, IConfiguration configuration, IConfigurationRefresher refresher)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
        }
    
        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))
                {
                    _logger.LogInformation(_configuration["TestApp:Settings:Message"] ?? "No data.");
                }
    
                await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
            }
        }
    }
    

    ConfigureRefresh Om du anropar metoden ensam uppdateras inte konfigurationen automatiskt. Du anropar TryRefreshAsync metoden från gränssnittet IConfigurationRefresher för att utlösa en uppdatering. Den här designen är att undvika begäranden som skickas till App Configuration även när programmet är inaktivt. Du kan inkludera samtalet TryRefreshAsync där du anser att ditt program är aktivt. Det kan till exempel vara när du bearbetar ett inkommande meddelande, en order eller en iteration av en komplex uppgift. Det kan också vara i en timer om ditt program är aktivt hela tiden. I det här exemplet anropar TryRefreshAsync du varje gång bakgrundstjänsten körs. Observera att även om anropet TryRefreshAsync misslyckas av någon anledning fortsätter programmet att använda den cachelagrade konfigurationen. Ett annat försök görs när den konfigurerade cachens förfallotid har passerat och anropet utlöses av programaktiviteten TryRefreshAsync igen. Anrop TryRefreshAsync är en no-op innan den konfigurerade förfallotiden för cachen förflutit, så dess prestandapåverkan är minimal, även om den anropas ofta.

Skapa och köra appen lokalt

  1. Ange en miljövariabel.

    Ange miljövariabeln med namnet Slutpunkt till slutpunkten för appkonfigurationsarkivet som finns under Översikt över din butik i Azure Portal.

    Om du använder Windows-kommandotolken kör du följande kommando och startar om kommandotolken så att ändringen börjar gälla:

    setx Endpoint "<endpoint-of-your-app-configuration-store>"
    

    Om du använder PowerShell kör du följande kommando:

    $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
    

    Om du använder macOS eller Linux kör du följande kommando:

    export Endpoint='<endpoint-of-your-app-configuration-store>'
    
  2. Kör följande kommando för att skapa appen.

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

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

    Skärmbild av bakgrundstjänsten.

  5. I Azure Portal går du till Konfigurationsutforskaren i appkonfigurationsarkivet och uppdaterar värdet för följande nyckel.

    Tangent Värde
    TestApp:Settings:Message Data från Azure App Configuration – Uppdaterad
  6. Vänta en stund tills tidsperioden för uppdateringsintervallet har passerat. Du kommer att se att konsolens utdata har ändrats.

    Skärmbild av den uppdaterade bakgrundstjänsten.

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 självstudien har du aktiverat .NET-bakgrundstjänsten för att dynamiskt uppdatera konfigurationsinställningarna från App Configuration. Om du vill lära dig hur du aktiverar dynamisk konfiguration i ett ASP.NET webbprogram fortsätter du till nästa självstudie:

Om du vill lära dig hur du använder en hanterad Azure-identitet för att effektivisera åtkomsten till App Configuration fortsätter du till nästa självstudie: