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-hostingintegratiemodellen modelleren een RabbitMQ-server als het RabbitMQServerResource-type. Voeg het 📦Aspire.Hosting.RabbitMQ NuGet-pakket toe aan het app-host 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 serverresource toevoegen

Roep in uw app-hostproject AddRabbitMQ aan op het builder exemplaar om een RabbitMQ serverresource 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 RabbitMQ-serverexemplaar gemaakt op uw lokale computer. Er wordt een verwijzing naar de RabbitMQ-server (de variabele rabbitmq) toegevoegd aan de ExampleProject. De RabbitMQ-serverresource bevat standaardreferenties met een username van "guest" en een willekeurig gegenereerde password met behulp van 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 RabbitMQ-server, roept u in plaats daarvan AddConnectionString aan. Voor meer informatie, zie Bestaande resources.

RabbitMQ serverresource toevoegen met beheerinvoegtoepassing

Als u de RabbitMQ-beheerinvoegtoepassing wilt toevoegen aan de RabbitMQ-serverresource, roept u de WithManagementPlugin methode 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 RabbitMQ-server. .NET .NET Aspire voegt een andere containerinstallatiekopie docker.io/library/rabbitmq-management toe aan de app-host waarop de beheerinvoegtoepassing wordt uitgevoerd.

RabbitMQ serverresource toevoegen met gegevensvolume

Als u een gegevensvolume wilt toevoegen aan de RabbitMQ serverresource, roept u de WithDataVolume methode aan op de RabbitMQ serverresource:

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 RabbitMQ servergegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /var/lib/rabbitmq pad in de RabbitMQ servercontainer 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 serverbron toevoegen met data-bind mount

Als u een gegevensbindingskoppeling wilt toevoegen aan de RabbitMQ-serverresource, 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 koppelingen hebben beperkte functionaliteit in vergelijking met volumes, omdat ze betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor de 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.

Databindingskoppelingen zijn afhankelijk van het bestandssysteem van de hostmachine om de RabbitMQ-servergegevens bij het opnieuw opstarten van de container te behouden. De koppeling voor gegevensbinding wordt gekoppeld aan de C:\RabbitMQ\Data in Windows (of /RabbitMQ/Data op Unix) op de hostcomputer in de RabbitMQ servercontainer. Zie Docker docs: Bind mounts voor meer informatie over data bind mounts.

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

Gezondheidscontroles voor hostingintegratie

De RabbitMQ hostingintegratie voegt automatisch een statuscontrole toe voor de RabbitMQ serverresource. De gezondheidscontrole verifieert of de RabbitMQ-server in bedrijf is en of er een verbinding tot stand kan worden gebracht.

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

integratie van Client

Installeer het 📦Aspire.RabbitMQ.Client NuGet-pakket in het project dat bedoeld is voor de applicatie die met de RabbitMQ-client werkt, om aan de slag te gaan met de .NET AspireRabbitMQ-clientintegratie. De RabbitMQ-clientintegratie registreert een IConnection--exemplaar dat u kunt gebruiken om met RabbitMQte communiceren.

dotnet add package Aspire.RabbitMQ.Client

Belangrijk

Het Aspire.RabbitMQ.Client NuGet-pakket is afhankelijk van het RabbitMQ.Client NuGet-pakket. Met de release van versie 7.0.0 van RabbitMQ.Clientwerd er een binaire breukvormende verandering geïntroduceerd. Hiervoor is een nieuw clientintegratiepakket, Aspire.RabbitMQ.Client.v7, gemaakt. Het oorspronkelijke Aspire.RabbitMQ.Client-pakket blijft verwijzen naar RabbitMQ.Client versie 6.8.1, waardoor compatibiliteit met eerdere versies van de RabbitMQ-clientintegratie wordt gewaarborgd. Het nieuwe Aspire.RabbitMQ.Client.v7-pakket verwijst naar RabbitMQ.Client versie 7.0.0. In een toekomstige versie van .NET.NET Aspirewordt de Aspire.RabbitMQ.Client bijgewerkt naar versie 7.x en wordt het Aspire.RabbitMQ.Client.v7-pakket afgeschaft. Zie Migreren naar RabbitMQ.NETClient 7.xvoor meer informatie.

RabbitMQ-client toevoegen

Roep in het Program.cs bestand van het clientgebruikte project de AddRabbitMQClient-extensiemethode aan op elke IHostApplicationBuilder om een IConnection te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een verbindingsnaamparameter.

builder.AddRabbitMQClient(connectionName: "messaging");

Tip

De parameter connectionName moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de RabbitMQ serverresource in het hostproject van de app. Zie RabbitMQ serverresource 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.

Gekeyde RabbitMQ client 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
      }
    }
  }
}

Zie RabbitMQvoor het volledige JSON clientintegratieschema Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Inline delegates gebruiken

U kunt ook de Action<RabbitMQClientSettings> configureSettings delegate doorgeven om enkele of alle opties inline in te stellen, bijvoorbeeld om gezondheidscontroles 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 opgegeven clientnaam voor verbindingen wilt instellen:

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

Client integratie gezondheidstoestand controles

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

De .NET AspireRabbitMQ-integratie:

  • Hiermee wordt de gezondheidscontrole toegevoegd wanneer RabbitMQClientSettings.DisableHealthChecksfalse is, waarbij geprobeerd wordt om verbinding te maken met en een kanaal te creëren op de RabbitMQ-server.
  • 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.

Logboek houden

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