Delen via


Integratie van .NET AspireenRabbitMQ

omvat:hostingintegratie: en Client integratie

RabbitMQ is een betrouwbare berichten- en streamingbroker, die eenvoudig te implementeren is in cloudomgevingen, on-premises en op uw lokale computer. Met de .NET AspireRabbitMQ-integratie kunt u verbinding maken met bestaande RabbitMQ-instanties of nieuwe instanties aanmaken vanuit .NET met de docker.io/library/rabbitmq containerimage.

Hostingintegratie

De RabbitMQ-integratie host een RabbitMQserver van het RabbitMQServerResource type. Voeg het 📦Aspire.Hosting.RabbitMQ NuGet-pakket toe aan het app-hostproject project om toegang te krijgen tot dit type en de bijbehorende API's.

dotnet add package Aspire.Hosting.RabbitMQ

Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.

RabbitMQ server-resource toevoegen

Roep in uw app-hostproject AddRabbitMQ aan op het builder exemplaar om een RabbitMQserver-resource toe te voegen:

var builder = DistributedApplication.CreateBuilder(args);

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

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

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

Wanneer .NET.NET Aspire een containerinstallatiekopie toevoegt aan de app-host, zoals wordt weergegeven in het vorige voorbeeld met de docker.io/library/rabbitmq-installatiekopie, wordt er een nieuw RabbitMQserver exemplaar op uw lokale computer gemaakt. Er wordt een verwijzing naar uw RabbitMQserver (de variabele rabbitmq) toegevoegd aan de ExampleProject. De RabbitMQserver-resource bevat standaardreferenties met een username van "guest" en willekeurig gegenereerde password via de CreateDefaultPasswordParameter-methode.

De methode WithReference configureert een verbinding in de ExampleProject met de naam "messaging". Zie levenscyclus van containerresourcesvoor meer informatie.

Tip

Als u liever verbinding wilt maken met een bestaande RabbitMQserver, roept u in plaats daarvan AddConnectionString aan. Zie Bestaande resourcesraadplegen voor meer informatie.

RabbitMQ server resource toevoegen met beheerinvoegtoepassing

Als u de RabbitMQ beheerinvoegtoepassing wilt toevoegen aan de RabbitMQserver-resource, roept u de methode WithManagementPlugin aan:

var builder = DistributedApplication.CreateBuilder(args);

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

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

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

De RabbitMQ-beheerinvoegtoepassing biedt een HTTP-API voor beheer en bewaking van uw RabbitMQserver. .NET .NET Aspire voegt een andere containerinstallatiekopie docker.io/library/rabbitmq-management toe aan de app-host waarop de beheerinvoegtoepassing wordt uitgevoerd.

RabbitMQ server resource toevoegen met gegevensvolume

Als u een gegevensvolume wilt toevoegen aan de RabbitMQserver-resource, roept u de WithDataVolume methode aan voor de RabbitMQserver-resource:

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

Het gegevensvolume wordt gebruikt om de RabbitMQserver gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /var/lib/rabbitmq pad in de RabbitMQserver container en wanneer er geen name parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Voor meer informatie over gegevensvolumes en details over waarom ze de voorkeur hebben boven bind-mounts, zie Docker docs: Volumes.

RabbitMQ server resource toevoegen met koppeling voor gegevensbinding

Als u een koppeling voor gegevensbinding wilt toevoegen aan de RabbitMQserver-resource, roept u de methode WithDataBindMount aan:

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

Belangrijk

Gegevens koppelen beperkte functionaliteit hebben in vergelijking met volumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, ideaal voor ontwikkeling en testen waar real-time wijzigingen nodig zijn.

Gegevensbindingen zijn afhankelijk van het bestandssysteem van de hostmachine om de RabbitMQserver gegevens bij herstarten van de container te behouden. De koppeling voor gegevensbinding is gekoppeld aan het C:\RabbitMQ\Data op Windows, of het /RabbitMQ/Data op het Unix-pad op de hostcomputer in de RabbitMQ-server-container. Zie Docker docs: Bindingskoppelingenvoor meer informatie over koppelingskoppelingen voor gegevens.

RabbitMQ server resource toevoegen met parameters

Als u expliciet de gebruikersnaam en het wachtwoord wilt opgeven die door de containerimage worden gebruikt, kunt u deze referenties als parameters meegeven. Bekijk het volgende alternatieve voorbeeld:

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

Zie Externe parametersvoor meer informatie over het opgeven van parameters.

Statuscontroles voor hostingintegratie

De RabbitMQ hostingintegratie voegt automatisch een statuscontrole toe voor de RabbitMQserver resource. De statuscontrole verifieert of de RabbitMQserver draait en of er een verbinding tot stand kan worden gebracht.

De hostingintegratie is afhankelijk van de 📦 AspNetCore.HealthChecks.Rabbitmq NuGet-pakket.

integratie van Client

Installeer de 📦Aspireom aan de slag te gaan met de .NET AspireRabbitMQclient-integratie.RabbitMQ.Client NuGet-pakket in het clientverbruikende project, dat wil gezegd, het project voor de toepassing die gebruikmaakt van de RabbitMQclient. De RabbitMQclient-integratie registreert een IConnection--exemplaar dat u kunt gebruiken om met RabbitMQte communiceren.

dotnet add package Aspire.RabbitMQ.Client

RabbitMQ client toevoegen

Gebruik in het Program.cs-bestand van uw project dat gebruikmaakt van clientde AddRabbitMQClient-extensiemethode op elke IHostApplicationBuilder om een IConnection te registreren voor gebruik via de afhankelijkheidsinjectiecontainer. De methode gebruikt een verbindingsnaamparameter.

builder.AddRabbitMQClient(connectionName: "messaging");

Fooi

De parameter connectionName moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de RabbitMQserver resource in het app-hostproject. Zie RabbitMQserver resource toevoegenvoor meer informatie.

Vervolgens kunt u het IConnection exemplaar ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:

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

Voor meer informatie over "dependency injection" (afhankelijkheidsinjectie), zie .NET afhankelijkheidsinjectie.

Sleutel RabbitMQclient toevoegen

Er kunnen situaties zijn waarin u meerdere IConnection exemplaren met verschillende verbindingsnamen wilt registreren. Als u keyed RabbitMQ-clients wilt registreren, roept u de methode AddKeyedRabbitMQClient aan:

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

Vervolgens kunt u de IConnection exemplaren ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:

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

Voor meer informatie over sleutelservices, zie .NET afhankelijkheidsinjectie: Keyed services.

Configuratie

De .NET AspireRabbitMQ-integratie biedt meerdere opties voor het configureren van de verbinding op basis van de vereisten en conventies van uw project.

Een verbindingsreeks gebruiken

Wanneer u een verbindingsreeks uit de sectie ConnectionStrings configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van de AddRabbitMQClient methode:

builder.AddRabbitMQClient(connectionName: "messaging");

Vervolgens wordt de verbindingsreeks opgehaald uit de ConnectionStrings configuratiesectie:

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

Voor meer informatie over het opmaken van deze verbindingsreeks, zie de documentatie voor de RabbitMQ URI-specificatie.

Configuratieproviders gebruiken

De .NET AspireRabbitMQ-integratie ondersteunt Microsoft.Extensions.Configuration. Het laadt de RabbitMQClientSettings vanuit de configuratie met behulp van de Aspire:RabbitMQ:Client-sleutel. Het volgende codefragment is een voorbeeld van een appsettings.json-bestand waarmee een aantal van de opties wordt geconfigureerd:

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

Voor het volledige integratieschema van RabbitMQclientJSON, zie Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Inline gedelegeerden gebruiken

U kunt ook de Action<RabbitMQClientSettings> configureSettings delegate doorgeven om enkele of alle opties inline in te stellen, bijvoorbeeld om gezondheidstesten vanuit de code uit te schakelen.

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

U kunt ook de IConnectionFactory instellen met behulp van de delegateparameter Action<IConnectionFactory> configureConnectionFactory van de methode AddRabbitMQClient. Als u bijvoorbeeld de client opgegeven naam voor verbindingen wilt instellen:

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

gezondheidscontroles voor de integratie van Client

Standaard kunnen .NET.NET Aspire integraties statuscontroles voor alle services inschakelen. Zie .NET.NET Aspire overzicht van integratiesvoor meer informatie.

De .NET AspireRabbitMQ-integratie:

  • Voegt de gezondheidscontrole toe wanneer RabbitMQClientSettings.DisableHealthChecksfalseis, waarmee wordt geprobeerd verbinding te maken met en een kanaal op de RabbitMQserverte creëren.
  • Integreert met het /health HTTP-eindpunt, waarbij alle geregistreerde gezondheidscontroles moeten slagen zodat de app als gereed wordt beschouwd om verkeer te accepteren.

Waarneembaarheid en telemetrie

.NET .NET Aspire integraties stellen automatisch configuraties in voor logging, tracing en metrics, die ook wel bekend staan als de pijlers van observability. Zie .NET.NET Aspire overzicht van integratieintegratiesvoor meer informatie over de waarneembaarheid en telemetrie van integraties. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.

Loggen

De .NET AspireRabbitMQ-integratie maakt gebruik van de volgende logboekcategorieën:

  • RabbitMQ.Client

Opsporing

De .NET AspireRabbitMQ-integratie verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:

  • Aspire.RabbitMQ.Client

Statistieken

De .NET AspireRabbitMQ integratie biedt momenteel geen ondersteuning voor metriek als standaard.

Zie ook