integrazione di .NET AspireRabbitMQ
includi:integrazione dell'hosting e Client integrazione
RabbitMQ è un broker di streaming e di messaggistica affidabile, facile da distribuire in ambienti cloud, locali e nel computer locale. L'integrazione .NET AspireRabbitMQ consente di connettersi alle istanze esistenti di RabbitMQ o di creare nuove istanze da .NET con l'immagine del contenitore docker.io/library/rabbitmq
.
Integrazione dell'hosting
L'integrazione di hosting RabbitMQ modella un server RabbitMQ come tipo RabbitMQServerResource. Per accedere a questo tipo e alle relative API, aggiungere il pacchetto NuGet 📦Aspire.Hosting.RabbitMQ nel progetto host dell'app .
- .NET CLI
- PackageReference
dotnet add package Aspire.Hosting.RabbitMQ
Per ulteriori informazioni, vedere dotnet add package o Gestire le dipendenze dei pacchetti nelle applicazioni .NET.
Aggiungere la risorsa server RabbitMQ
Nel progetto host dell'applicazione, chiamare AddRabbitMQ sull'istanza builder
per aggiungere una risorsa server RabbitMQ.
var builder = DistributedApplication.CreateBuilder(args);
var rabbitmq = builder.AddRabbitMQ("messaging");
builder.AddProject<Projects.ExampleProject>()
.WithReference(rabbitmq);
// After adding all resources, run the app...
Quando .NET.NET Aspire aggiunge un'immagine contenitore all'host dell'app, come illustrato nell'esempio precedente con l'immagine docker.io/library/rabbitmq
, crea una nuova istanza del server RabbitMQ nel computer locale. Un riferimento al server di RabbitMQ (la variabile rabbitmq
) viene aggiunto al ExampleProject
. La risorsa server RabbitMQ include le credenziali predefinite con un username
composte da "guest"
e password
generate in modo casuale usando il metodo CreateDefaultPasswordParameter.
Il metodo WithReference configura una connessione nel ExampleProject
denominato "messaging"
. Per ulteriori informazioni, vedere Ciclo di vita delle risorse del contenitore.
Consiglio
Se preferisci connetterti a un server già esistente di RabbitMQ, chiama AddConnectionString. Per altre informazioni, vedere Fare riferimento alle risorse esistenti.
Aggiungi RabbitMQ risorsa server con plug-in di gestione
Per aggiungere il plug-in di gestione RabbitMQ alla risorsa server RabbitMQ, chiamare il metodo WithManagementPlugin:
var builder = DistributedApplication.CreateBuilder(args);
var rabbitmq = builder.AddRabbitMQ("messaging")
.WithManagementPlugin();
builder.AddProject<Projects.ExampleProject>()
.WithReference(rabbitmq);
// After adding all resources, run the app...
Il plug-in di gestione RabbitMQ fornisce un'API basata su HTTP per la gestione e il monitoraggio del server RabbitMQ.
.NET
.NET Aspire aggiunge un'altra immagine del contenitore docker.io/library/rabbitmq-management
all'host dell'app che esegue il plug-in di gestione.
Aggiungere RabbitMQ risorsa server con volume di dati
Per aggiungere un volume di dati alla risorsa server RabbitMQ, chiamare il metodo WithDataVolume nella risorsa server RabbitMQ:
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...
Il volume di dati viene usato per rendere persistenti i dati del server RabbitMQ al di fuori del ciclo di vita del contenitore. Il volume di dati viene montato nel percorso /var/lib/rabbitmq
nel contenitore del server RabbitMQ e quando non viene specificato un parametro name
, il nome viene generato in modo casuale. Per altre informazioni sui volumi di dati e sui motivi per cui sono preferiti rispetto a associare i montaggi, vedere la documentazione Docker: Volumi.
Aggiungere la risorsa server RabbitMQ con montaggio bind dei dati
Per aggiungere un montaggio di associazione dati alla risorsa server RabbitMQ, chiamare il metodo WithDataBindMount:
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...
Importante
I di binding dei dati hanno funzionalità limitate rispetto ai volumi , che offrono prestazioni, portabilità e sicurezza migliori, rendendole più adatte per gli ambienti di produzione. Tuttavia, i bind mount consentono l'accesso e la modifica diretta dei file sul sistema host, ideale per lo sviluppo e il test dove sono necessarie modifiche in tempo reale.
I montaggi di associazione dati si basano sul file system del computer host per rendere persistenti i dati del server RabbitMQ tra i riavvii del contenitore. Il bind mount dei dati è montato sul percorso C:\RabbitMQ\Data
su Windows (o /RabbitMQ/Data
su Unix) sul computer host nel contenitore server RabbitMQ. Per altre informazioni sui montaggi di associazione dati, vedere Docker docs: Bind mounts.
Aggiungere RabbitMQ risorsa server con parametri
Quando si vuole specificare in modo esplicito il nome utente e la password usati dall'immagine del contenitore, è possibile specificare queste credenziali come parametri. Si consideri l'esempio alternativo seguente:
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...
Per altre informazioni sulla fornitura di parametri, vedere Parametri esterni.
Hosting dei controlli di integrità dell'integrazione
L'integrazione dell'hosting RabbitMQ aggiunge automaticamente un controllo di integrità per la risorsa server RabbitMQ. Il controllo di integrità verifica che il server RabbitMQ sia in esecuzione e che sia possibile stabilire una connessione.
L'integrazione dell'hosting si basa sui pacchetti NuGet 📦 AspNetCore.HealthChecks.Rabbitmq.
integrazione Client
Per iniziare a usare l'integrazione client .NET AspireRabbitMQ, installare il pacchetto NuGet 📦Aspire.RabbitMQ.Client nel progetto che utilizza il client, ovvero il progetto per l'applicazione che usa il client RabbitMQ. L'integrazione client
- .NET CLI
- PackageReference
dotnet add package Aspire.RabbitMQ.Client
Aggiungere RabbitMQ client
Nel file Program.cs del progetto nel quale si utilizza il client, chiamare il metodo di estensione AddRabbitMQClient in qualsiasi IHostApplicationBuilder per registrare un IConnection
da usare tramite il contenitore di iniezione delle dipendenze. Il metodo accetta un parametro del nome di connessione.
builder.AddRabbitMQClient(connectionName: "messaging");
Consiglio
Il parametro connectionName
deve corrispondere al nome usato quando si aggiunge la risorsa server RabbitMQ nel progetto host dell'app. Per altre informazioni, vedere Aggiungere RabbitMQ risorsa server.
Puoi quindi recuperare l'istanza di IConnection
tramite iniezione delle dipendenze. Ad esempio, per recuperare la connessione da un servizio di esempio:
public class ExampleService(IConnection connection)
{
// Use connection...
}
Per ulteriori informazioni sull'iniezione di dipendenze, vedere .NET iniezione di dipendenze.
Aggiungere un client con chiave RabbitMQ
In alcuni casi potrebbe essere necessario registrare più istanze di IConnection
con nomi di connessione diversi. Per registrare i client RabbitMQ con chiave, chiamare il metodo AddKeyedRabbitMQClient:
builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");
È quindi possibile recuperare le istanze IConnection
usando l'iniezione di dipendenze. Ad esempio, per recuperare la connessione da un servizio di esempio:
public class ExampleService(
[FromKeyedServices("chat")] IConnection chatConnection,
[FromKeyedServices("queue")] IConnection queueConnection)
{
// Use connections...
}
Per altre informazioni sui servizi con chiave, vedere .NET inserimento delle dipendenze: Servizi con chiave.
Configurazione
L'integrazione .NET AspireRabbitMQ offre più opzioni per configurare la connessione in base ai requisiti e alle convenzioni del progetto.
Usare una stringa di connessione
Quando si usa una stringa di connessione dalla sezione di configurazione ConnectionStrings
, è possibile specificare il nome della stringa di connessione quando si chiama il metodo AddRabbitMQClient:
builder.AddRabbitMQClient(connectionName: "messaging");
La stringa di connessione viene quindi recuperata dalla sezione di configurazione ConnectionStrings
:
{
"ConnectionStrings": {
"messaging": "amqp://username:password@localhost:5672"
}
}
Per altre informazioni su come formattare questa stringa di connessione, vedere la documentazione delle specifiche URI RabbitMQ.
Utilizzare i provider di configurazione
L'integrazione .NET AspireRabbitMQ supporta Microsoft.Extensions.Configuration. Carica il RabbitMQClientSettings dalla configurazione usando la chiave Aspire:RabbitMQ:Client
. Il frammento di codice seguente è un esempio di un file appsettings.json che configura alcune delle opzioni:
{
"Aspire": {
"RabbitMQ": {
"Client": {
"ConnectionString": "amqp://username:password@localhost:5672",
"DisableHealthChecks": true,
"DisableTracing": true,
"MaxConnectRetryCount": 2
}
}
}
}
Per lo schema completo di integrazione RabbitMQ client JSON, vedere Aspire.RabbitMQ.Client/ConfigurationSchema.json.
Utilizzare delegati inline
Puoi anche passare il delegato Action<RabbitMQClientSettings> configureSettings
per configurare alcune o tutte le opzioni in linea, ad esempio per disabilitare i controlli di integrità direttamente dal codice.
builder.AddRabbitMQClient(
"messaging",
static settings => settings.DisableHealthChecks = true);
È anche possibile configurare IConnectionFactory usando il parametro delegato Action<IConnectionFactory> configureConnectionFactory
del metodo AddRabbitMQClient
. Ad esempio, per impostare il nome fornito dal client per le connessioni:
builder.AddRabbitMQClient(
"messaging",
configureConnectionFactory:
static factory => factory.ClientProvidedName = "MyApp");
Client controlli di integrità dell'integrazione
Per impostazione predefinita, le integrazioni .NET.NET Aspire abilitano i controlli della salute per tutti i servizi. Per altre informazioni, vedere panoramica delle integrazioni .NET.NET Aspire.
Integrazione .NET AspireRabbitMQ:
- Aggiunge il controllo dello stato di salute quando RabbitMQClientSettings.DisableHealthChecks è
false
, che tenta di connettersi e creare un canale sul server RabbitMQ. - Si integra con l'endpoint HTTP
/health
, che specifica che tutti i controlli di integrità registrati devono essere passati affinché l'app sia considerata pronta per accettare il traffico.
Osservabilità e telemetria
.NET
.NET Aspire le integrazioni configurano automaticamente configurazioni di registrazione, traccia e metriche, talvolta note come i pilastri dell'osservabilità. Per altre informazioni sull'osservabilità e la telemetria dell'integrazione, vedere panoramica delle integrazioni .NET.NET Aspire. A seconda del servizio di backup, alcune integrazioni potrebbero supportare solo alcune di queste funzionalità. Ad esempio, alcune integrazioni supportano la registrazione e la traccia, ma non le metriche. Le funzionalità di telemetria possono essere disabilitate anche usando le tecniche presentate nella sezione Configurazione
Registrazione
L'integrazione .NET AspireRabbitMQ usa le categorie di log seguenti:
RabbitMQ.Client
Tracciamento
L'integrazione .NET AspireRabbitMQ emette le seguenti attività di tracciamento usando OpenTelemetry:
Aspire.RabbitMQ.Client
Metriche
L'integrazione .NET AspireRabbitMQ attualmente non supporta le metriche per impostazione predefinita.