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:
- .NET 8.0 lub .NET 9.0
- Środowisko uruchomieniowe kontenera zgodne ze standardem OCI, takie jak:
- Docker Desktop lub Podman. Aby uzyskać więcej informacji, zobacz Container runtime.
- Zintegrowane środowisko deweloperskie (IDE) lub edytor kodu, takie jak:
- Visual Studio 2022 w wersji 17.9 lub nowszej (opcjonalnie)
-
Visual Studio Code (opcjonalnie)
- C# Dev Kit: Rozszerzenie (opcjonalnie)
- JetBrains Rider z wtyczką .NET.NET Aspire (opcjonalnie)
Aby uzyskać więcej informacji, zobacz .NET.NET Aspire setup and toolingi .NET.NET Aspire SDK.
Tworzenie projektu
- W górnej części Visual Studioprzejdź do Plik>Nowy projekt>....
- W oknie dialogowym wprowadź .NET Aspire w polu wyszukiwania szablonu projektu i wybierz pozycję .NET.NET Aspire Starter Application. Wybierz pozycję Dalej.
- Na ekranie Konfiguruj nowy projekt:
- Wprowadź nazwę projektu AspireRedis.
- Pozostaw wartości domyślne rest i wybierz pozycję Dalej.
- 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
Dodaj 📦Aspire.Hosting.Redis pakiet NuGet do projektu
AspireRedis.AppHost
:- .NET interfejs wiersza polecenia
- OdwołanieDoPakietu
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.
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
Dodaj do aplikacji .NET Aspire pakiety integracji buforowania wyników
AspireRedis.Web
:dotnet add package Aspire.StackExchange.Redis.OutputCaching
W pliku Program.cs projektu
AspireRedis.Web
Blazor bezpośrednio po wierszuvar 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.
Zastąp zawartość pliku Home.razor projektu
AspireRedis.Web
Blazor 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
Dodaj do swojej aplikacji
pakiety integracyjne rozproszonego buforowania dla Stack Exchange : dotnet add package Aspire.StackExchange.Redis.DistributedCaching
W górnej części pliku Program.cs dodaj wywołanie do AddRedisDistributedCache:
builder.AddRedisDistributedCache("cache");
W pliku Program.cs dodaj następujące instrukcje
using
:using System.Text; using System.Text.Json; using Microsoft.Extensions.Caching.Distributed;
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:
- Uruchom aplikację przy użyciu Visual Studio, naciskając F5.
- Jeśli zostanie wyświetlone okno dialogowe Start Docker Desktop, wybierz pozycję Tak, aby uruchomić usługę.
- 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:
- Na stronie projektów, w wierszu webfrontend, kliknij link
localhost
w kolumnie Endpoints, aby otworzyć interfejs użytkownika aplikacji. - Aplikacja wyświetli bieżącą godzinę na stronie głównej.
- 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ą:
- Przejdź do strony Weather w interfejsie użytkownika Blazor, aby załadować tabelę losowych danych pogodowych.
- 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.