Udostępnij za pośrednictwem


Samouczek: implementowanie buforowania przy użyciu integracji .NET.NET Aspire

Aplikacje natywne dla chmury często wymagają różnych typów skalowalnych rozwiązań buforowania w celu zwiększenia wydajności. Integracje .NET Aspire upraszczają proces nawiązywania połączenia z popularnymi usługami buforowania, takimi jak Redis. Z tego artykułu dowiesz się, jak wykonywać następujące działania:

  • Utwórz podstawową aplikację ASP.NET, która jest skonfigurowana do używania .NET Aspire.
  • Dodaj integrację .NET Aspire, aby nawiązać połączenie z Redis i zaimplementować buforowanie.
  • Skonfiguruj integracje .NET.NET Aspire, aby spełniały określone wymagania.

W tym artykule opisano sposób używania dwóch różnych typów buforowania ASP.NET Core przy użyciu .NET Aspire i Redis:

  • buforowanie danych wyjściowych: konfigurowalna, rozszerzalna metoda buforowania na potrzeby przechowywania całych odpowiedzi HTTP dla przyszłych żądań.
  • Pamięć podręczna rozproszona: pamięć podręczna współdzielona przez wiele serwerów aplikacji, która umożliwia cache'owanie określonych fragmentów danych. Rozproszona pamięć podręczna jest zwykle utrzymywana jako usługa zewnętrzna na serwerach aplikacji, które uzyskują do niej dostęp i może zwiększyć wydajność i skalowalność aplikacji ASP.NET Core.

Warunki wstępne

Aby pracować z .NET.NET Aspire, musisz mieć zainstalowane lokalnie następujące elementy:

Aby uzyskać więcej informacji, zobacz .NET.NET Aspire setup and toolingi .NET.NET Aspire SDK.

Tworzenie projektu

  1. W górnej części Visual Studioprzejdź do Plik>Nowy projekt>....
  2. W oknie dialogowym wprowadź .NET Aspire w polu wyszukiwania szablonu projektu i wybierz pozycję .NET.NET Aspire Starter Application. Wybierz pozycję Dalej.
  3. Na ekranie Konfiguruj nowy projekt:
    • Wprowadź nazwę projektu AspireRedis.
    • Pozostaw wartości domyślne rest i wybierz pozycję Dalej.
  4. Na ekranie Dodatkowe informacje:
    • Upewnij się, że wybrano .NET 9.0.
    • Usuń zaznaczenie Użyj Redis do buforowania. Zaimplementujesz własne ustawienia buforowania.
    • Wybierz pozycję Utwórz.

Visual Studio tworzy nowe rozwiązanie .NET Aspire składające się z następujących projektów:

  • AspireRedis.Web — projekt interfejsu użytkownika Blazor z domyślnymi konfiguracjami .NET Aspire.
  • AspireRedis.ApiService — minimalny interfejs API z domyślnymi konfiguracjami .NET.NET Aspire, które zapewniają frontonowi dane.
  • AspireRedis.AppHost — projekt orkiestratora zaprojektowany pod kątem łączenia i konfigurowania różnych projektów i usług aplikacji.
  • AspireRedis.ServiceDefaults — wspólny projekt .NET.NET Aspire do zarządzania konfiguracjami wielokrotnie używanymi w projektach w rozwiązaniu związanymi z odpornością , odkrywaniem usług i telemetrią .

Konfigurowanie projektu hosta aplikacji

  1. Dodaj 📦Aspire.Hosting.Redis pakiet NuGet do projektu AspireRedis.AppHost:

    dotnet add package Aspire.Hosting.Redis
    

    Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzanie zależnościami pakietów w aplikacjach .NET.

  2. Zaktualizuj plik Program.cs projektu AspireRedis.AppHost, aby był zgodny z następującym kodem:

    var builder = DistributedApplication.CreateBuilder(args);
    
    var redis = builder.AddRedis("cache");
    
    var apiservice = builder.AddProject<Projects.AspireRedis_ApiService>("apiservice")
        .WithReference(redis);
    
    builder.AddProject<Projects.AspireRedis_Web>("webfrontend")
        .WithExternalHttpEndpoints()
        .WithReference(apiservice)
        .WithReference(redis);
    
    builder.Build().Run();
    

Powyższy kod tworzy lokalne wystąpienie kontenera Redis i konfiguruje interfejs użytkownika oraz interfejs API do automatycznego korzystania z tego wystąpienia zarówno dla danych wyjściowych, jak i buforowania rozproszonego. Kod konfiguruje również komunikację między interfejsem użytkownika frontendu a interfejsem API backendu, korzystając z odnajdywania usług. Dzięki funkcji odnajdywania niejawnych usług .NET.NET Aspirekonfigurowanie połączeń usług i zarządzanie nimi jest usprawnione pod kątem produktywności deweloperów. W kontekście tego samouczka funkcja upraszcza nawiązywanie połączenia z usługą Redis.

Tradycyjnie należy ręcznie określić parametry połączenia Redis w pliku appsettings.json każdego projektu:

{
  "ConnectionStrings": {
    "cache": "localhost:6379"
  }
}

Skonfigurowanie parametrów połączenia przy użyciu tej metody, chociaż funkcjonalne, wymaga duplikowania parametrów połączenia w wielu projektach, co może być uciążliwe i podatne na błędy.

Konfigurowanie interfejsu użytkownika przy użyciu buforowania danych wyjściowych

  1. Dodaj do aplikacji .NET Aspire pakiety integracji buforowania wyników AspireRedis.Web:

    dotnet add package Aspire.StackExchange.Redis.OutputCaching
    
  2. W pliku Program.cs projektu AspireRedis.WebBlazor bezpośrednio po wierszu var builder = WebApplication.CreateBuilder(args);dodaj wywołanie metody rozszerzenia AddRedisOutputCache:

    builder.AddRedisOutputCache("cache");
    

    Ta metoda wykonuje następujące zadania:

    • Konfiguruje buforowanie danych wyjściowych ASP.NET Core do używania wystąpienia Redis o określonej nazwie połączenia.
    • Automatycznie włącza odpowiednie kontrole kondycji, rejestrowanie i dane telemetryczne.
  3. Zastąp zawartość pliku Home.razor projektu AspireRedis.WebBlazor następującym kodem:

    @page "/"
    @attribute [OutputCache(Duration = 10)]
    
    <PageTitle>Home</PageTitle>
    
    <h1>Hello, world!</h1>
    
    Welcome to your new app on @DateTime.Now
    

    Integracja obejmuje atrybut [OutputCache], który buforuje całą renderowaną odpowiedź. Strona zawiera również wywołanie @DateTime.Now, które pomaga sprawdzić, czy odpowiedź jest buforowana.

Konfigurowanie interfejsu API z rozproszonym buforowaniem

  1. Dodaj do swojej aplikacji pakiety integracyjne rozproszonego buforowania dla Stack Exchange :

    dotnet add package Aspire.StackExchange.Redis.DistributedCaching
    
  2. W górnej części pliku Program.cs dodaj wywołanie do AddRedisDistributedCache:

    builder.AddRedisDistributedCache("cache");
    
  3. W pliku Program.cs dodaj następujące instrukcje using:

    using System.Text;
    using System.Text.Json;
    using Microsoft.Extensions.Caching.Distributed;
    
  4. W pliku Program.cs zastąp istniejący kod punktu końcowego /weatherforecast następującym kodem:

    app.MapGet("/weatherforecast", async (IDistributedCache cache) =>
    {
        var cachedForecast = await cache.GetAsync("forecast");
    
        if (cachedForecast is null)
        {
            var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
            var forecast = Enumerable.Range(1, 5).Select(index =>
            new WeatherForecast
            (
                DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                Random.Shared.Next(-20, 55),
                summaries[Random.Shared.Next(summaries.Length)]
            ))
            .ToArray();
    
            await cache.SetAsync("forecast", Encoding.UTF8.GetBytes(JsonSerializer.Serialize(forecast)), new ()
            {
                AbsoluteExpiration = DateTime.Now.AddSeconds(10)
            }); ;
    
            return forecast;
        }
    
        return JsonSerializer.Deserialize<IEnumerable<WeatherForecast>>(cachedForecast);
    })
    .WithName("GetWeatherForecast");
    

Testowanie aplikacji lokalnie

Przetestuj zachowanie buforowania aplikacji, wykonując następujące kroki:

  1. Uruchom aplikację przy użyciu Visual Studio, naciskając F5.
  2. Jeśli zostanie wyświetlone okno dialogowe Start Docker Desktop, wybierz pozycję Tak, aby uruchomić usługę.
  3. Dashboard .NET.NET Aspire ładuje się w przeglądarce i wyświetla listę projektów interfejsu użytkownika (UI) i interfejsu programowania aplikacji (API).

Przetestuj pamięć podręczną danych wyjściowych:

  1. Na stronie projektów, w wierszu webfrontend, kliknij link localhost w kolumnie Endpoints, aby otworzyć interfejs użytkownika aplikacji.
  2. Aplikacja wyświetli bieżącą godzinę na stronie głównej.
  3. Odśwież przeglądarkę co kilka sekund, aby zobaczyć tę samą stronę, która jest zwracana przez buforowanie wyników. Po upływie 10 sekund pamięć podręczna wygaśnie, a strona zostanie ponownie załadowana z zaktualizowanym czasem.

Przetestuj rozproszoną pamięć podręczną:

  1. Przejdź do strony Weather w interfejsie użytkownika Blazor, aby załadować tabelę losowych danych pogodowych.
  2. Odświeżaj przeglądarkę co kilka sekund, aby zobaczyć te same dane pogodowe buforowane jako dane wyjściowe. Po upływie 10 sekund pamięć podręczna wygaśnie, a strona zostanie ponownie załadowana przy użyciu zaktualizowanych danych pogodowych.

Gratulacje! Skonfigurowano aplikację ASP.NET Core do używania buforowania wyjściowego i rozproszonego z .NET Aspire.