Delen via


Integratie van AspireenRabbitMQ

Inclusief:Hostingintegratie inbegrepen —&— Client integratie inbegrepenClient integratie

RabbitMQ is een betrouwbare berichten- en streamingbroker, die eenvoudig te implementeren is in cloudomgevingen, on-premises en op uw lokale computer. Met de 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. Als u toegang wilt krijgen tot dit type en de bijbehorende API's, voegt u de 📦Aspire. Gastvrijheid.RabbitMQ NuGet-pakket in het AppHost-project .

dotnet add package Aspire.Hosting.RabbitMQ

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

RabbitMQ serverresource toevoegen

Roep in uw AppHost-project AddRabbitMQ het builder exemplaar aan 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 Aspire een containerafbeelding toevoegt aan de AppHost, zoals wordt weergegeven in het voorgaande voorbeeld met de docker.io/library/rabbitmq afbeelding, 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.

Aanbeveling

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

RabbitMQ serverresource toevoegen met beheerinvoegtoepassing

Als u de RabbitMQ beheerinvoegtoepassing wilt toevoegen aan de RabbitMQ serverresource, roept u de WithManagementPlugin methode aan. Vergeet niet om parameters te gebruiken om de referenties voor de container in te stellen. U hebt deze referenties nodig om u aan te melden bij de beheerinvoegtoepassing:

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)
                      .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. Aspire voegt een andere container-image docker.io/library/rabbitmq-management toe aan de AppHost die de beheersplugin uitvoert. U kunt de beheerinvoegtoepassing openen via het Aspire dashboard door een eindpunt voor uw RabbitMQ resource te selecteren:

Schermopname van het Aspire dashboard waarin wordt getoond hoe u verbinding maakt met de RabbitMQ beheerinvoegtoepassing.

Meld u aan bij de beheerinvoegtoepassing met de referenties die u hebt geconfigureerd met parameters:

Schermopname van de RabbitMQ beheerinvoegtoepassing.

Zie Levensduur van containerresources voor meer informatie.

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.

Client integratie

Installeer het Aspire 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 📦Aspire-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 Aspire zal de Aspire.RabbitMQ.Client worden bijgewerkt naar versie 7.x, en het Aspire.RabbitMQ.Client.v7-pakket zal worden 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");

Aanbeveling

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

Benoemde configuratie gebruiken

De AspireRabbitMQ integratie ondersteunt benoemde configuratie, waarmee u meerdere exemplaren van hetzelfde resourcetype met verschillende instellingen kunt configureren. De benoemde configuratie maakt gebruik van de verbindingsnaam als een sleutel in het hoofdgedeelte van de configuratie.

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

In dit voorbeeld kunnen de rabbit1 en rabbit2 verbindingsnamen worden gebruikt wanneer AddRabbitMQClient wordt aangeroepen:

builder.AddRabbitMQClient("rabbit1");
builder.AddRabbitMQClient("rabbit2");

Benoemde configuratie heeft voorrang op de configuratie op het hoogste niveau. Als beide zijn opgegeven, overschrijven de instellingen van de benoemde configuratie de instellingen op het hoogste niveau.

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

Aspire Standaard schakelen integraties statuscontroles in voor alle services. Zie Aspire het overzicht van integraties voor meer informatie.

De 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

Aspire Integraties stellen automatisch configuraties voor logboekregistratie, tracering en metrische gegevens in, die ook wel de pijlers van waarneembaarheid worden genoemd. Zie het overzicht van integratieobserveerbaarheid en telemetrie voor meer informatie over integratieobserveerbaarheid en telemetrieAspire. 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 AspireRabbitMQ-integratie maakt gebruik van de volgende logboekcategorieën:

  • RabbitMQ.Client

Opsporing

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

  • Aspire.RabbitMQ.Client

Statistieken

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

Zie ook