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.DisableHealthChecks
false
is, 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.