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.Client
werd 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
}
}
}
}
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.DisableHealthChecks
false
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.