Udostępnij za pośrednictwem


Samouczek: używanie konfiguracji dynamicznej w usłudze w tle platformy .NET

Dane z usługi App Configuration można załadować jako Ustawienia aplikacji .NET. Aby uzyskać więcej informacji, zobacz przewodnik Szybki start. Jednak zgodnie z projektem platformy .NET Ustawienia aplikacji można odświeżać tylko po ponownym uruchomieniu aplikacji. Dostawca .NET usługi App Configuration to biblioteka .NET Standard. Obsługuje ona buforowanie i odświeżanie konfiguracji dynamicznie bez ponownego uruchamiania aplikacji. W tym samouczku pokazano, jak wdrożyć dynamiczne aktualizacje konfiguracji w usłudze w tle platformy .NET.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Skonfiguruj usługę w tle platformy .NET, aby zaktualizować jej konfigurację w odpowiedzi na zmiany w magazynie usługi App Configuration.
  • Korzystaj z najnowszej konfiguracji w usłudze w tle.

Wymagania wstępne

Dodawanie wartości klucza

Dodaj następującą wartość klucza do magazynu App Configuration i pozostaw wartości domyślne Etykieta i Typ zawartości. Aby uzyskać więcej informacji na temat dodawania wartości klucz-wartości do magazynu przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia, przejdź do artykułu Create a key-value (Tworzenie wartości klucza).

Key Wartość
TestApp:Ustawienia:Message Dane z konfiguracji aplikacja systemu Azure

Tworzenie usługi w tle platformy .NET

Interfejs wiersza polecenia platformy .NET służy do tworzenia nowego projektu aplikacji platformy .NET. Zaletą korzystania z interfejsu wiersza polecenia platformy .NET za pośrednictwem programu Visual Studio jest to, że jest ona dostępna na platformach Windows, macOS i Linux. Alternatywnie użyj wstępnie zainstalowanych narzędzi dostępnych w usłudze Azure Cloud Shell.

  1. Utwórz nowy folder dla projektu.

  2. W nowym folderze uruchom następujące polecenie, aby utworzyć nowy projekt usługi w tle platformy .NET:

    dotnet new worker
    

Ponowne ładowanie danych z usługi App Configuration

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

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

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

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Połączenie do usługi App Configuration.

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

    W metodzie ConfigureRefresh klucz w magazynie usługi App Configuration jest zarejestrowany do monitorowania zmian. Metoda Register ma opcjonalny parametr refreshAll logiczny, który może służyć do wskazania, czy wszystkie wartości konfiguracji powinny zostać odświeżone, jeśli zarejestrowany klucz ulegnie zmianie. W tym przykładzie zostanie odświeżony tylko klucz TestApp:Ustawienia:Message. Wszystkie ustawienia zarejestrowane na potrzeby odświeżania mają domyślny czas wygaśnięcia pamięci podręcznej 30 sekund przed podjęciem nowej próby odświeżenia. Można go zaktualizować, wywołując metodę AzureAppConfigurationRefreshOptions.SetCacheExpiration .

  5. Otwórz Worker.cs. Wstrzykiwanie IConfiguration i IConfigurationRefresher do Worker usługi i rejestrowanie danych konfiguracji z usługi 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 Wywołanie samej metody nie spowoduje automatycznego odświeżenia konfiguracji. Wywołasz metodę TryRefreshAsync z interfejsu IConfigurationRefresher , aby wyzwolić odświeżanie. Ten projekt polega na unikaniu żądań wysyłanych do usługi App Configuration nawet wtedy, gdy aplikacja jest bezczynna. Możesz dołączyć wywołanie TryRefreshAsync , w którym rozważasz aktywną aplikację. Może to być na przykład podczas przetwarzania komunikatu przychodzącego, zamówienia lub iteracji złożonego zadania. Może również znajdować się w czasomierzu, jeśli aplikacja jest aktywna przez cały czas. W tym przykładzie wywołasz wywołanie TryRefreshAsync za każdym razem, gdy usługa w tle jest wykonywana. Należy pamiętać, że nawet jeśli wywołanie TryRefreshAsync zakończy się niepowodzeniem z jakiegokolwiek powodu, aplikacja będzie nadal używać buforowanej konfiguracji. Kolejna próba zostanie podjęta po upływie skonfigurowanego czasu wygaśnięcia pamięci podręcznej, a TryRefreshAsync wywołanie zostanie ponownie wyzwolone przez działanie aplikacji. Wywołanie TryRefreshAsync jest operacją no-op przed upływem skonfigurowanego czasu wygaśnięcia pamięci podręcznej, więc jej wpływ na wydajność jest minimalny, nawet jeśli jest często wywoływany.

Lokalne kompilowanie i uruchamianie aplikacji

  1. Ustaw zmienną środowiskową o nazwie Połączenie ionString i ustaw ją na klucz dostępu do magazynu usługi App Configuration. W wierszu polecenia uruchom następujące polecenie.

    Aby skompilować i uruchomić aplikację lokalnie przy użyciu wiersza polecenia systemu Windows, uruchom następujące polecenie.

    setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Uruchom ponownie wiersz polecenia, aby zezwolić na wprowadzenie zmiany. Wydrukuj wartość zmiennej środowiskowej, aby sprawdzić, czy jest ona ustawiona prawidłowo.

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

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

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

    Zrzut ekranu przedstawiający usługę w tle.

  5. W witrynie Azure Portal przejdź do Eksploratora konfiguracji magazynu usługi App Configuration i zaktualizuj wartość następującego klucza.

    Key Wartość
    TestApp:Ustawienia:Message Dane z konfiguracji aplikacja systemu Azure — zaktualizowano
  6. Poczekaj chwilę na przekazanie przedziału czasu interwału odświeżania. Zostaną zmienione dane wyjściowe konsoli.

    Zrzut ekranu przedstawiający odświeżaną usługę w tle.

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 przypadkowo nieprawidłowej 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. Zobaczysz prośbę 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 samouczku włączono usługę w tle platformy .NET w celu dynamicznego odświeżania ustawień konfiguracji z poziomu usługi App Configuration. Aby dowiedzieć się, jak włączyć konfigurację dynamiczną w aplikacji internetowej ASP.NET, przejdź do następnego samouczka:

Aby dowiedzieć się, jak używać tożsamości zarządzanej platformy Azure w celu usprawnienia dostępu do usługi App Configuration, przejdź do następnego samouczka: