Los componentes .NET Aspire son un conjunto curado de paquetes NuGet seleccionados específicamente para facilitar la integración de aplicaciones nativas de la nube con servicios y plataformas destacados, incluidos, entre otros, Redis y PostgreSQL. Cada componente proporciona funcionalidades esenciales para aplicaciones nativas de la nube a través de la provisión automática o patrones de configuración estandarizados. Los componentes .NET Aspire se pueden usar sin un proyecto de host de aplicación (orquestador), pero están diseñados para funcionar mejor con el host de aplicaciones .NET Aspire.
Los componentes .NET Aspire no deben confundirse con los paquetes de alojamiento .NET Aspire, ya que sirven para propósitos diferentes. Los paquetes de alojamiento se utilizan para modelar y configurar varios recursos en una aplicación .NET Aspire, mientras que los componentes se utilizan para mapear la configuración a varias bibliotecas de clientes.
Existe una lista en constante crecimiento de Componentes .NET Aspire creados y distribuidos por Microsoft y la comunidad. .NET Aspire es flexible y cualquiera puede crear su propio componente para integrarse con sus propios servicios.
Mejoremos nuestra aplicación añadiendo un componente. Vamos a añadir un componente que nos ayudará a conectarnos a una caché de Redis para mejorar el rendimiento de nuestra API.
Existen dos tipos de caché que podríamos integrar en nuestra aplicación, incluyendo:
- Caché de salida: Un método de caché configurable y extensible para almacenar respuestas HTTP completas para futuras solicitudes.
- Caché distribuido: Una caché compartida por varios servidores de aplicaciones que permite cachear piezas específicas de datos. Una caché distribuida se mantiene típicamente como un servicio externo a los servidores de aplicaciones que acceden a ella y puede mejorar el rendimiento y la escalabilidad de una aplicación ASP.NET Core.
Integraremos el componente de Caché de salida en nuestro host de la aplicación. Este componente nos ayudará a cachear la respuesta de nuestra API en la caché de Redis.
Para añadir el componente Redis a nuestro host de la aplicación, necesitamos instalar el paquete NuGet Aspire.Hosting.Redis
. Este paquete proporciona los componentes necesarios para configurar el servicio en el Host de la Aplicación. Redis se proporciona a través de una imagen de contenedor en este taller, y cuando iniciamos el Host de la Aplicación .NET Aspire, automáticamente descargará la imagen del contenedor de Redis y empezará el servidor de Redis.
Con el NuGet instalado, podemos configurarlo.
-
Abre el archivo
Program.cs
en el proyectoAppHost
. -
Añade el siguiente código debajo de
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache")
Aquí, hemos configurado la caché de Redis con el nombre
cache
. Este nombre se utiliza para identificar la caché enApi
oMyWeatherHub
. -
Actualiza el
api
en el Host de la Aplicación con una referencia a la caché.var api = builder.AddProject<Projects.Api>("api") .WithReference(cache);
-
Adicionalmente, podríamos configurar Redis Commander, una herramienta de gestión para Redis. Como parte del paquete
Aspire.Hosting.Redis
, Redis Commander está disponible en el mismo componente. Para añadir Redis Commander, agrega el siguiente código debajo de la nueva configuración de Redis añadida.var cache = builder.AddRedis("cache") .WithRedisCommander();
No hemos realizado cambios en los proyectos Api
o MyWeatherHub
, pero podemos ver el inicio de la caché de Redis cuando iniciamos el Host de la Aplicación.
[!IMPORTANTE] Dado que Redis se ejecuta en un contenedor, necesitarás asegurarte de que Docker esté funcionando en tu máquina.
-
Inicia Docker Desktop o Podman.
-
Inicia el proyecto del Host de la Aplicación.
-
Verás tanto el contenedor de Redis como el contenedor de Redis Commander descargarse e iniciar tanto en el dashboard como en Docker Desktop.
-
Instala el paquete NuGet
Aspire.StackExchange.Redis.OutputCaching
en el proyectoApi
para obtener acceso a las APIs de Redis. -
Abre el archivo
Program.cs
en el proyectoApi
. -
Añade el siguiente código debajo de
var builder = WebApplication.CreateBuilder(args);
en la parte superior del archivo:builder.AddRedisOutputCache("cache");
Ten en cuenta que estamos usando el nombre "cache" para referenciar la caché de Redis que configuramos en el Host de la Aplicación.
-
El
NwsManager
ya ha sido configurado para usar caché de salida, pero con una caché en memoria. Lo actualizaremos para usar la caché de Redis. Abre el archivoNwsManager.cs
en la carpetaData
. -
En la clase
NwsManagerExtensions
encontrarás un métodoAddNwsManager
. -
ELIMINA el siguiente código:
// Añadir caché de salida predeterminada services.AddOutputCache(options => { options.AddBasePolicy(builder => builder.Cache()); });
Debido a que configuramos la aplicación para usar la caché de Redis en el archivo
Program.cs
, ya no necesitamos añadir la política de caché de salida predeterminada.
-
Inicia el proyecto Host de la Aplicación y abre el proyecto
MyWeatherHub
desde el dashboard. -
Haz clic en una ciudad y luego haz clic de nuevo. Verás que la respuesta está cacheada y la segunda solicitud es mucho más rápida que la primera bajo la pestaña
Traces
. -
También puedes ver la respuesta cacheada en el Redis Commander. Abre el Redis Commander haciendo clic en el endpoint
Redis Commander
en el dashboard. Bajo estadísticas verás conexiones y comandos procesados. -
Además, puedes ver los registros de la caché de Redis y del Redis Commander en la pestaña
Console
.
Los componentes de .NET Aspire son flexibles y personalizables. Por defecto, el componente Redis utiliza una imagen de contenedor de Redis de Docker Hub. Sin embargo, puedes usar tu propia imagen de contenedor de Redis proporcionando el nombre de la imagen y la etiqueta después del método AddRedis
. Por ejemplo, si tienes una imagen de contenedor de Redis personalizada como Garnet, puedes proporcionar el nombre de la imagen y la etiqueta en el Host de la Aplicación de la siguiente manera:
var cache = builder.AddRedis("cache")
.WithImage("ghcr.io/microsoft/garnet")
.WithImageTag("latest")
.WithRedisCommander();
-
Ejecuta la aplicación y ahora verás Garnet ejecutándose en el dashboard y en Docker Desktop.
-
También puedes ver los registros de Garnet en la pestaña
Consola
.
En esta sección, añadimos un componente Redis al Host de la Aplicación e integramos la caché de salida en la API. Vimos cómo la respuesta fue cacheada en la caché de Redis y cómo la segunda solicitud fue mucho más rápida que la primera. También vimos cómo usar Redis Commander para gestionar la caché de Redis.
Hay muchos más componentes disponibles que puedes usar para integrar con tus servicios. Puedes encontrar la lista de componentes disponibles en la documentación de .NET Aspire.
Un siguiente paso natural sería integrar una base de datos o aprovechar Azure Redis Cache como una solución alojada. Componentes para estos y más están disponibles en NuGet.