Tutorial: Dynamische Konfiguration in einem .NET-Hintergrunddienst verwenden
Daten aus der App-Konfiguration können als App-Einstellungen in eine .NET-Anwendung geladen werden. Weitere Informationen finden Sie im Schnellstart. Wie von .NET vorgesehen, können die App-Einstellungen jedoch nur beim Neustart der Anwendung aktualisiert werden. Der .NET-Anbieter von App Configuration ist eine .NET Standard-Bibliothek. Sie unterstützt das dynamische Zwischenspeichern und Aktualisieren der Konfiguration ohne Anwendungsneustart. Dieses Tutorial zeigt, wie Sie dynamische Konfigurationsaktualisierungen in einem .NET-Hintergrunddienst implementieren können.
In diesem Tutorial lernen Sie Folgendes:
- Einrichten Ihrer .NET Code-App für die Aktualisierung der Konfiguration als Reaktion auf Änderungen in einem App Configuration-Speicher.
- Verbrauchen Sie die neueste Konfiguration in Ihrem Hintergrunddienst.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto.
- Ein App Configuration-Speicher. Erstellen Sie einen Speicher.
- .NET SDK 6.0 oder höher – auch in der Azure Cloud Shell verfügbar.
Hinzufügen eines Schlüssel-Wert-Paars
Fügen Sie dem App Configuration-Speicher den folgenden Schlüsselwert hinzu, und übernehmen Sie für Bezeichnung und Inhaltstyp die Standardwerte. Weitere Informationen zum Hinzufügen von Schlüssel-Wert-Paaren zu einem Speicher mithilfe des Azure-Portals oder der CLI finden Sie unter Erstellen eines Schlüssel-Wert-Paars.
Schlüssel | Wert |
---|---|
TestApp:Settings:Message | Daten aus Azure App Configuration |
Erstellen Sie einen .NET-Hintergrunddienst
Sie verwenden die .NET-Befehlszeilenschnittstelle (CLI), um ein neues .NET-App-Projekt zu erstellen.llen. Der Vorteil bei Verwendung der .NET-CLI gegenüber Visual Studio ist, dass sie für alle Windows-, macOS- und Linux-Plattformen verfügbar ist. Verwenden Sie alternativ die vorinstallierten Tools, die in Azure Cloud Shell verfügbar sind.
Erstellen Sie einen neuen Ordner für Ihr Projekt.
Führen Sie in dem neuen Ordner den folgenden Befehl aus, um ein neues .NET-Hintergrunddienstprojekt zu erstellen:
dotnet new worker
Erneutes Laden von Daten aus App Configuration
Fügen Sie Referenzen zu dem NuGet-Paket
Microsoft.Extensions.Configuration.AzureAppConfiguration
hinzu, indem Sie den folgenden Befehl ausführen:dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
Führen Sie den folgenden Befehl aus, um Pakete für Ihr Projekt wiederherzustellen:
dotnet restore
Öffnen Sie Program.cs, und fügen Sie die folgenden Anweisungen hinzu:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Verbinden Sie sich mit der App-Konfiguration.
// Existing code in Program.cs // ... ... var builder = Host.CreateApplicationBuilder(args); builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")) // 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 // ... ...
In der Methode
ConfigureRefresh
wird ein Schlüssel in Ihrem App Configuration-Speicher für die Änderungsüberwachung registriert. Die MethodeRegister
enthält den optionalen booleschen ParameterrefreshAll
, mit dem angegeben werden kann, ob alle Konfigurationswerte bei einer Änderung des registrierten Schlüssels aktualisiert werden sollen. In diesem Beispiel wird nur der Schlüssel TestApp:Settings:Message aktualisiert. Alle für die Aktualisierung registrierten Einstellungen haben einen standardmäßigen Cache-Ablauf von 30 Sekunden, bevor eine neue Aktualisierung versucht wird. Dieser kann durch Aufrufen der MethodeAzureAppConfigurationRefreshOptions.SetCacheExpiration
aktualisiert werden.Öffnen Sie Worker.cs. Injizieren Sie
IConfiguration
undIConfigurationRefresher
in denWorker
Dienst und protokollieren Sie die Konfigurationsdaten von 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); } } }
Das Aufrufen der Methode
ConfigureRefresh
allein führt nicht dazu, dass die Konfiguration automatisch aktualisiert wird. Sie rufen die MethodeTryRefreshAsync
über die SchnittstelleIConfigurationRefresher
auf, um eine Aktualisierung auszulösen. Dieses Design soll verhindern, dass Anfragen an die App Configuration gesendet werden, selbst wenn Ihre Anwendung im Leerlauf ist. Sie können den AufrufTryRefreshAsync
dort verwenden, wo Sie Ihre Anwendung als aktiv betrachten. Dies kann beispielsweise der Fall sein, wenn Sie eine eingehende Nachricht, eine Bestellung oder eine Iteration einer komplexen Aufgabe verarbeiten. Er kann auch Teil eines Timers sein, wenn Ihre Anwendung ständig aktiv ist. In diesem Beispiel rufen SieTryRefreshAsync
jedes Mal auf, wenn der Hintergrunddienst ausgeführt wird. Beachten Sie, dass Ihre Anwendung auch dann weiterhin die zwischengespeicherte Konfiguration verwendet, wenn beim AufrufTryRefreshAsync
aus irgendeinem Grund ein Fehler auftritt. Ein weiterer Versuch wird unternommen, wenn die konfigurierte Cacheablaufzeit verstrichen ist und der AufrufTryRefreshAsync
von Ihrer Anwendungsaktivität erneut ausgelöst wird. Das Aufrufen vonTryRefreshAsync
ist vor Verstreichen der konfigurierten Cacheablaufzeit keine Option. Daher sind die Auswirkungen auf die Leistung minimal, auch wenn der Aufruf häufig erfolgt.
Lokales Erstellen und Ausführen der App
Legen Sie eine Umgebungsvariable mit dem Namen ConnectionString fest, und geben Sie dafür den Zugriffsschlüssel für Ihren App Configuration-Speicher an. Führen Sie in der Befehlszeile den folgenden Befehl aus.
Um die App lokal über die Windows-Eingabeaufforderung zu erstellen und auszuführen, führen Sie den folgenden Befehl aus.
setx ConnectionString "connection-string-of-your-app-configuration-store"
Starten Sie die Eingabeaufforderung neu, damit die Änderung wirksam wird. Geben Sie den Wert der Umgebungsvariablen aus, um zu überprüfen, ob er richtig festgelegt wurde.
Führen Sie den folgenden Befehl aus, um die App zu erstellen:
dotnet build
Nachdem der Build erfolgreich abgeschlossen wurde, führen Sie den folgenden Befehl aus, um die App lokal auszuführen.
dotnet run
Die folgenden Ausgaben sollten an der Konsole angezeigt werden.
Navigieren Sie im Azure-Portal zum Konfigurations-Explorer Ihres App Configuration-Speichers, und aktualisieren Sie den Wert des folgenden Schlüssels.
Key Wert TestApp:Settings:Message Daten aus Azure App Configuration: Aktualisiert Warten Sie ein paar Augenblicke, bis das Zeitfenster für das Aktualisierungsintervall abgelaufen ist. Sie sehen, dass sich die Konsolenausgaben geändert haben.
Bereinigen von Ressourcen
Wenn Sie die in diesem Artikel erstellten Ressourcen nicht mehr verwenden möchten, löschen Sie die erstellte Ressourcengruppe, um Kosten zu vermeiden.
Wichtig
Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen für diesen Artikel in einer Ressourcengruppe erstellt haben, die andere beizubehaltende Ressourcen enthält, löschen Sie die Ressourcen einzeln über den entsprechenden Bereich, statt die Ressourcengruppe zu löschen.
- Melden Sie sich beim Azure-Portal an, und klicken Sie auf Ressourcengruppen.
- Geben Sie im Feld Nach Name filtern den Namen Ihrer Ressourcengruppe ein.
- Wählen Sie in der Ergebnisliste den Ressourcengruppennamen aus, um eine Übersicht anzuzeigen.
- Wählen Sie die Option Ressourcengruppe löschen.
- Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie zur Bestätigung den Namen Ihrer Ressourcengruppe ein, und klicken Sie auf Löschen.
Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.
Nächste Schritte
In diesem Lernprogramm haben Sie Ihren .NET-Hintergrunddienst aktiviert, um die Konfigurationseinstellungen aus der App-Konfiguration dynamisch zu aktualisieren. Um zu erfahren, wie Sie die dynamische Konfiguration in einer ASP.NET-Webanwendung aktivieren können, fahren Sie mit dem nächsten Lernprogramm fort:
Im nächsten Tutorial erfahren Sie, wie Sie eine von Azure verwaltete Identität hinzufügen, um den Zugriff auf App Configuration zu optimieren: