Comparteix a través de


integración de .NET AspireRabbitMQ

incluye: integración de hospedaje de e integración de Client

RabbitMQ es un agente de streaming y mensajería confiable, que es fácil de implementar en entornos en la nube, locales y en el equipo local. La integración de .NET AspireRabbitMQ permite conectarse a instancias de RabbitMQ existentes o crear nuevas instancias a partir de .NET con la imagen de contenedor docker.io/library/rabbitmq.

Integración de hospedaje

La integración de hospedaje RabbitMQ modela un servidor RabbitMQ como el tipo RabbitMQServerResource. Para acceder a este tipo y sus APIs, agregue el paquete NuGet 📦Aspire.Hosting.RabbitMQ en el proyecto de host de la aplicación .

dotnet add package Aspire.Hosting.RabbitMQ

Para obtener más información, consulte dotnet add package o Manage package dependencies in .NET applications.

Agregar RabbitMQ recurso de servidor

En el proyecto host de la aplicación, llame a AddRabbitMQ en la instancia de builder para agregar un recurso de servidor RabbitMQ:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

Cuando .NET.NET Aspire agrega una imagen de contenedor al host de la aplicación, como se muestra en el ejemplo anterior con la imagen de docker.io/library/rabbitmq, crea una nueva instancia de servidor RabbitMQ en el equipo local. Se agrega una referencia al servidor de RabbitMQ (la variable rabbitmq) al ExampleProject. El recurso del servidor de RabbitMQ incluye credenciales predeterminadas con un username de "guest" y password que se generan aleatoriamente mediante el método CreateDefaultPasswordParameter.

El método WithReference configura una conexión en el ExampleProject denominado "messaging". Para obtener más información, consulte el ciclo de vida del recurso del contenedor .

Propina

Si prefiere conectarse a un servidor RabbitMQ existente, llame a AddConnectionString en su lugar. Para obtener más información, vea Hacer referencia a los recursos existentes.

Agregar RabbitMQ recurso de servidor con complemento de administración

Para añadir el complemento de administración RabbitMQ al recurso de servidor RabbitMQ, llame al método WithManagementPlugin:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithManagementPlugin();

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

El complemento de administración de RabbitMQ proporciona una API basada en HTTP para la administración y supervisión del servidor de RabbitMQ. .NET .NET Aspire agrega otra imagen de contenedor docker.io/library/rabbitmq-management al host de la aplicación que ejecuta el complemento de administración.

Agregar RabbitMQ recurso de servidor con volumen de datos

Para agregar un volumen de datos al recurso del servidor de RabbitMQ, llame al método WithDataVolume en el recurso del servidor de RabbitMQ:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

El volumen de datos se usa para conservar los datos del servidor de RabbitMQ fuera del ciclo de vida de su contenedor. El volumen de datos se monta en la ruta /var/lib/rabbitmq en el contenedor del servidor RabbitMQ y cuando no se especifica un parámetro name, el nombre se genera de forma aleatoria. Para obtener más información sobre los volúmenes de datos y los detalles sobre por qué se prefieren a montajes enlazados, consulte la Docker documentación: Volúmenes.

Adición del recurso RabbitMQ del servidor con montaje de datos vinculado

Para agregar una vinculación de datos al recurso del servidor RabbitMQ, llame al método WithDataBindMount.

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataBindMount(
                          source: @"C:\RabbitMQ\Data",
                          isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

Importante

Los montajes de enlace de datos tienen una funcionalidad limitada en comparación con los volúmenes , que ofrecen mejor rendimiento, portabilidad y seguridad, por lo que son más apropiados para entornos de producción. Sin embargo, las vinculaciones de montaje permiten el acceso directo y la modificación de archivos en el sistema host, lo cual es ideal para el desarrollo y las pruebas, donde son necesarios los cambios en tiempo real.

Las vinculaciones de datos dependen del sistema de archivos de la máquina anfitriona para mantener los datos del servidor de RabbitMQ durante los reinicios de contenedores. El montaje de vinculación de datos está montado en la ruta C:\RabbitMQ\Data en Windows (o /RabbitMQ/Data en Unix) en la máquina host, dentro del contenedor del servidor RabbitMQ. Para obtener más información sobre los montajes de datos, consulte la documentación sobre Docker: Montajes de enlace.

Añadir recurso de servidor RabbitMQ con parámetros

Si desea proporcionar explícitamente el nombre de usuario y la contraseña usados por la imagen de contenedor, puede proporcionar estas credenciales como parámetros. Considere el siguiente ejemplo alternativo:

var builder = DistributedApplication.CreateBuilder(args);

var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);

var rabbitmq = builder.AddRabbitMQ("messaging", username, password);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

Para obtener más información sobre cómo proporcionar parámetros, consulte Parámetros externos.

Verificación del estado de las integraciones de alojamiento

La integración de hospedaje de RabbitMQ agrega automáticamente una comprobación de estado para el recurso del servidor de RabbitMQ. La comprobación de estado comprueba que el RabbitMQ servidor se está ejecutando y que se puede establecer una conexión a él.

La integración de hospedaje se basa en el paquete NuGet 📦 AspNetCore.HealthChecks.Rabbitmq.

integración Client

Para empezar a trabajar con la integración del cliente de .NET AspireRabbitMQ, instale el paquete NuGet 📦Aspire.RabbitMQ.Client en el proyecto que consume el cliente, es decir, el proyecto de la aplicación que utiliza el cliente de RabbitMQ. La integración de cliente RabbitMQ registra una instancia de IConnection que puede usar para interactuar con RabbitMQ.

dotnet add package Aspire.RabbitMQ.Client

Importante

El paquete NuGet Aspire.RabbitMQ.Client depende del paquete NuGet RabbitMQ.Client. Con el lanzamiento de la versión 7.0.0 de RabbitMQ.Client, se introdujo un cambio que rompe la compatibilidad binaria. Para solucionar esto, se creó un nuevo paquete de integración de cliente, Aspire.RabbitMQ.Client.v7, . El paquete Aspire.RabbitMQ.Client original sigue haciendo referencia a RabbitMQ.Client versión 6.8.1, lo que garantiza la compatibilidad con versiones anteriores de la integración de cliente de RabbitMQ. El nuevo paquete Aspire.RabbitMQ.Client.v7 hace referencia a RabbitMQ.Client versión 7.0.0. En una versión futura de .NET.NET Aspire, el Aspire.RabbitMQ.Client se actualizará a la versión 7.x y el paquete de Aspire.RabbitMQ.Client.v7 quedará en desuso. Para obtener más información, consulte Migración a RabbitMQ.NETClient 7.x.

Agregar cliente RabbitMQ

En el archivo Program.cs de su proyecto cliente, llame al método de extensión AddRabbitMQClient en cualquier IHostApplicationBuilder para registrar un IConnection para su uso a través del contenedor de inyección de dependencias. El método toma un parámetro de nombre de conexión.

builder.AddRabbitMQClient(connectionName: "messaging");

Propina

El parámetro connectionName debe coincidir con el nombre usado al agregar el recurso de servidor RabbitMQ en el proyecto host de la aplicación. Para obtener más información, consulte Añadir RabbitMQ recurso de servidor.

A continuación, puede recuperar la instancia de IConnection mediante la inyección de dependencias. Por ejemplo, para recuperar la conexión de un servicio de ejemplo:

public class ExampleService(IConnection connection)
{
    // Use connection...
}

Para obtener más información sobre la inserción de dependencias, consulte .NET inserción de dependencias.

Adición de un cliente de RabbitMQ con clave

Puede haber situaciones en las que quiera registrar varias instancias de IConnection con nombres de conexión diferentes. Para registrar clientes de RabbitMQ con clave, llame al método AddKeyedRabbitMQClient:

builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");

A continuación, puede recuperar las instancias de IConnection usando inyección de dependencias. Por ejemplo, para recuperar la conexión de un servicio de ejemplo:

public class ExampleService(
    [FromKeyedServices("chat")] IConnection chatConnection,
    [FromKeyedServices("queue")] IConnection queueConnection)
{
    // Use connections...
}

Para obtener más información sobre los servicios con claves, consulte .NET inserción de dependencias: Servicios con claves.

Configuración

La integración de .NET AspireRabbitMQ proporciona varias opciones para configurar la conexión en función de los requisitos y convenciones del proyecto.

Uso de una cadena de conexión

Al usar una cadena de conexión de la sección de configuración de ConnectionStrings, puede proporcionar el nombre de la cadena de conexión al llamar al método AddRabbitMQClient:

builder.AddRabbitMQClient(connectionName: "messaging");

A continuación, se obtiene la cadena de conexión de la sección de configuración ConnectionStrings.

{
  "ConnectionStrings": {
    "messaging": "amqp://username:password@localhost:5672"
  }
}

Para obtener más información sobre cómo dar formato a esta cadena de conexión, consulte los documentos de especificación de URI de RabbitMQ.

Uso de proveedores de configuración

La integración de .NET AspireRabbitMQ admite Microsoft.Extensions.Configuration. Carga el RabbitMQClientSettings desde la configuración usando la clave Aspire:RabbitMQ:Client. El fragmento de código siguiente es un ejemplo de un archivo appsettings.json que configura algunas de las opciones:

{
  "Aspire": {
    "RabbitMQ": {
      "Client": {
        "ConnectionString": "amqp://username:password@localhost:5672",
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "MaxConnectRetryCount": 2
      }
    }
  }
}

Para consultar el esquema completo de integración de cliente RabbitMQJSON, vea Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Usar delegados en línea

También puede pasar el delegado Action<RabbitMQClientSettings> configureSettings para configurar algunas o todas las opciones directamente, por ejemplo, para deshabilitar las comprobaciones de estado desde el código.

builder.AddRabbitMQClient(
    "messaging",
    static settings => settings.DisableHealthChecks = true);

También puede configurar el IConnectionFactory mediante el parámetro delegado Action<IConnectionFactory> configureConnectionFactory del método AddRabbitMQClient. Por ejemplo, para establecer el nombre proporcionado por el cliente para las conexiones:

builder.AddRabbitMQClient(
    "messaging",
    configureConnectionFactory:
        static factory => factory.ClientProvidedName = "MyApp");

Comprobaciones de estado de la integración Client

De forma predeterminada, las integraciones de .NET.NET Aspire habilitan las comprobaciones de estado de para todos los servicios. Para obtener más información, consulte .NET.NET Aspire integrations overview.

La integración de .NET AspireRabbitMQ:

  • Agrega la comprobación de estado cuando RabbitMQClientSettings.DisableHealthChecks es false, que intenta conectarse a y crear un canal en el servidor de RabbitMQ.
  • Se integra con el punto de conexión HTTP de /health, que especifica que todas las comprobaciones de estado registradas deben superarse para que la aplicación se considere lista para aceptar tráfico.

Observabilidad y telemetría

.NET .NET Aspire integraciones configuran automáticamente las configuraciones de registro, seguimiento y métricas, que a veces se conocen como los pilares de la observabilidad. Para obtener más información sobre la observabilidad de integración y la telemetría, consulte información general sobre las integraciones de .NET.NET Aspire. En función del servicio de respaldo, algunas integraciones solo admiten algunas de estas características. Por ejemplo, algunas integraciones admiten el registro y el seguimiento, pero no las métricas. Las características de telemetría también se pueden deshabilitar utilizando las técnicas presentadas en la sección Configuración.

Registro

La integración de .NET AspireRabbitMQ usa las siguientes categorías de registro:

  • RabbitMQ.Client

Rastreo

La integración de .NET AspireRabbitMQ emite las siguientes actividades de seguimiento mediante OpenTelemetry:

  • Aspire.RabbitMQ.Client

Métricas

La integración de .NET AspireRabbitMQ actualmente no admite métricas de forma predeterminada.

Consulte también