integracja .NET AspireRabbitMQ
obejmuje:integracja hostingu oraz
Client integracja.
RabbitMQ to niezawodny broker obsługi komunikatów i przesyłania strumieniowego, który jest łatwy do wdrożenia w środowiskach chmury, lokalnie i na komputerze lokalnym. Integracja .NET AspireRabbitMQ umożliwia podłączanie się do istniejących instancji RabbitMQ lub tworzenie nowych instancji z .NET, korzystając z obrazu kontenera docker.io/library/rabbitmq
.
Integracja hostingu
RabbitMQ integracja hostingu modeluje serwer RabbitMQ jako typ RabbitMQServerResource. Aby uzyskać dostęp do tego typu i jego interfejsów API, dodaj 📦Aspire.Hosting.RabbitMQ pakiet NuGet w projekcie hosta aplikacji .
dotnet add package Aspire.Hosting.RabbitMQ
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzaj zależnościami pakietów w .NET aplikacjach.
Dodawanie zasobu serwera RabbitMQ
W projekcie hosta aplikacji wywołaj AddRabbitMQ w wystąpieniu builder
, aby dodać zasób serwera RabbitMQ:
var builder = DistributedApplication.CreateBuilder(args);
var rabbitmq = builder.AddRabbitMQ("messaging");
builder.AddProject<Projects.ExampleProject>()
.WithReference(rabbitmq);
// After adding all resources, run the app...
Gdy .NET.NET Aspire dodaje obraz kontenera do hosta aplikacji, jak pokazano we wcześniejszym przykładzie z obrazem docker.io/library/rabbitmq
, tworzy nową instancję serwera RabbitMQ na komputerze lokalnym. Referencja do serwera RabbitMQ (zmienna rabbitmq
) jest dodawana do ExampleProject
. Zasób serwera RabbitMQ zawiera poświadczenia domyślne z username
"guest"
i losowo generowane password
przy użyciu metody CreateDefaultPasswordParameter.
Metoda WithReference konfiguruje połączenie w ExampleProject
o nazwie "messaging"
. Aby uzyskać więcej informacji, zobacz Cykl życia zasobów kontenera.
Napiwek
Jeśli wolisz nawiązać połączenie z istniejącym serwerem RabbitMQ, wywołaj AddConnectionString zamiast tego. Aby uzyskać więcej informacji, zobacz Odwołanie się do istniejących zasobów.
Dodawanie zasobu serwera RabbitMQ za pomocą wtyczki zarządzania
Aby dodać wtyczkę zarządzania RabbitMQ do zasobu serwera RabbitMQ, wywołaj metodę 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...
Wtyczka zarządzania RabbitMQ udostępnia oparty na protokole HTTP interfejs API do zarządzania i monitorowania serwera RabbitMQ.
.NET
.NET Aspire dodaje inny obraz kontenera docker.io/library/rabbitmq-management
do hosta aplikacji obsługującego wtyczkę do zarządzania.
Dodaj zasób serwera RabbitMQ z woluminem danych
Aby dodać wolumin danych do zasobu serwera RabbitMQ, wywołaj metodę WithDataVolume w zasobie serwera 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...
Wolumin danych jest używany do utrwalania danych serwera RabbitMQ poza cyklem życia kontenera. Wolumin danych jest instalowany w ścieżce /var/lib/rabbitmq
w kontenerze serwera RabbitMQ, a gdy nie podano parametru name
, nazwa jest generowana losowo. Aby uzyskać więcej informacji na temat woluminów danych i szczegółów, dlaczego są one preferowane zamiast montowań wiązań , zobacz w dokumentacji Docker: Volumes.
Dodaj zasób serwera RabbitMQ z mounowaniem powiązań danych
Aby dodać instalację powiązania danych do zasobu serwera RabbitMQ, wywołaj metodę 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...
Ważny
Instalacje powiązane danych mają ograniczoną funkcjonalność w porównaniu z woluminami , co zapewnia lepszą wydajność, przenośność i bezpieczeństwo, co czyni je bardziej odpowiednimi dla środowisk produkcyjnych. Jednak montowanie wiążące umożliwia bezpośredni dostęp i modyfikację plików w systemie hosta, co jest idealne do rozwoju i testowania, gdzie potrzebne są zmiany w czasie rzeczywistym.
Instalacje powiązania danych polegają na systemie plików maszyny hosta w celu utrwalania danych serwera RabbitMQ między ponownymi uruchomieniami kontenera. Powiązanie danych jest montowane na C:\RabbitMQ\Data
w systemie Windows (lub na /RabbitMQ/Data
na Unix) na ścieżce maszyny hosta w kontenerze serwera RabbitMQ. Aby uzyskać więcej informacji na temat instalacji powiązań danych, zobacz Docker docs: Bind mounts.
Dodawanie zasobu serwera RabbitMQ z parametrami
Jeśli chcesz wyraźnie wskazać nazwę użytkownika i hasło używane przez obraz kontenera, możesz podać te poświadczenia jako parametry. Rozważmy następujący przykład alternatywny:
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...
Aby uzyskać więcej informacji na temat udostępniania parametrów, zobacz Parametry zewnętrzne.
Hostowanie kontroli kondycji integracji
Integracja hostowania RabbitMQ automatycznie dodaje kontrolę kondycji zasobu serwera RabbitMQ. Sprawdzanie kondycji sprawdza, czy serwer RabbitMQ jest uruchomiony i czy można nawiązać z nim połączenie.
Integracja hostingu opiera się na pakiecie NuGet 📦 AspNetCore.HealthChecks.Rabbitmq.
integracja Client
Aby rozpocząć pracę z integracją klienta .NET AspireRabbitMQ, zainstaluj pakiet NuGet 📦Aspire.RabbitMQ.Client w projekcie korzystającym z klienta, czyli w projekcie dla aplikacji, która korzysta z klienta RabbitMQ. Integracja klienta RabbitMQ rejestruje wystąpienie IConnection, którego można użyć do interakcji z RabbitMQ.
dotnet add package Aspire.RabbitMQ.Client
Dodaj klienta RabbitMQ
W pliku Program.cs projektu korzystającego z klienta wywołaj metodę rozszerzenia AddRabbitMQClient na dowolnym IHostApplicationBuilder, aby zarejestrować IConnection
do użycia za pośrednictwem kontenera wstrzykiwania zależności. Metoda przyjmuje parametr nazwy połączenia.
builder.AddRabbitMQClient(connectionName: "messaging");
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu serwera RabbitMQ w projekcie hosta aplikacji. Aby uzyskać więcej informacji, zobacz Dodaj RabbitMQ zasób serwera.
Następnie można pobrać wystąpienie IConnection
przy użyciu iniekcji zależności. Aby na przykład pobrać połączenie z przykładowej usługi:
public class ExampleService(IConnection connection)
{
// Use connection...
}
Aby uzyskać więcej informacji na temat wstrzykiwania zależności, zobacz .NET wstrzykiwanie zależności.
Dodaj klienta RabbitMQ jako kluczowego
Mogą wystąpić sytuacje, w których chcesz zarejestrować wiele wystąpień IConnection
z różnymi nazwami połączeń. Aby zarejestrować klientów powiązanych z RabbitMQ, wywołaj metodę AddKeyedRabbitMQClient.
builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");
Następnie można pobrać wystąpienia IConnection
przy użyciu wstrzykiwania zależności. Aby na przykład pobrać połączenie z przykładowej usługi:
public class ExampleService(
[FromKeyedServices("chat")] IConnection chatConnection,
[FromKeyedServices("queue")] IConnection queueConnection)
{
// Use connections...
}
Aby uzyskać więcej informacji na temat usług z kluczem, zobacz .NET wstrzykiwanie zależności: usługi z kluczem.
Konfiguracja
Integracja .NET AspireRabbitMQ udostępnia wiele opcji konfigurowania połączenia na podstawie wymagań i konwencji projektu.
Używanie parametrów połączenia
W przypadku używania parametrów połączenia z sekcji konfiguracji ConnectionStrings
podczas wywoływania metody AddRabbitMQClient można podać nazwę parametrów połączenia:
builder.AddRabbitMQClient(connectionName: "messaging");
Następnie parametry połączenia są pobierane z sekcji konfiguracji ConnectionStrings
:
{
"ConnectionStrings": {
"messaging": "amqp://username:password@localhost:5672"
}
}
Aby uzyskać więcej informacji na temat formatowania tego ciągu połączenia, zobacz dokumentację specyfikacji URI RabbitMQ.
Korzystanie z dostawców konfiguracji
Integracja .NET AspireRabbitMQ obsługuje Microsoft.Extensions.Configuration. Ładuje RabbitMQClientSettings z konfiguracji przy użyciu klucza Aspire:RabbitMQ:Client
. Poniższy fragment kodu to przykład pliku appsettings.json, który konfiguruje niektóre opcje:
{
"Aspire": {
"RabbitMQ": {
"Client": {
"ConnectionString": "amqp://username:password@localhost:5672",
"DisableHealthChecks": true,
"DisableTracing": true,
"MaxConnectRetryCount": 2
}
}
}
}
Aby uzyskać pełny schemat integracji klienta RabbitMQJSON, zobacz Aspire.RabbitMQ.Client/ConfigurationSchema.json.
Używanie delegatów wbudowanych
Możesz również przekazać delegata Action<RabbitMQClientSettings> configureSettings
, aby skonfigurować niektóre lub wszystkie opcje wbudowane, na przykład w celu wyłączenia kontroli kondycji z kodu:
builder.AddRabbitMQClient(
"messaging",
static settings => settings.DisableHealthChecks = true);
Można również skonfigurować IConnectionFactory przy użyciu parametru delegata Action<IConnectionFactory> configureConnectionFactory
metody AddRabbitMQClient
. Aby na przykład ustawić nazwę podaną przez klienta dla połączeń:
builder.AddRabbitMQClient(
"messaging",
configureConnectionFactory:
static factory => factory.ClientProvidedName = "MyApp");
Client kontrola kondycji integracji
Domyślnie integracje .NET.NET Aspire umożliwiają sprawdzanie kondycji dla wszystkich usług. Aby uzyskać więcej informacji, zobacz omówienie integracji .NET.NET Aspire.
Integracja .NET AspireRabbitMQ:
- Dodaje kontrolę kondycji, gdy RabbitMQClientSettings.DisableHealthChecks jest
false
, która próbuje nawiązać połączenie i utworzyć kanał na serwerze RabbitMQ. - Integruje się z punktem końcowym HTTP
/health
, który wymaga, aby wszystkie zarejestrowane kontrole kondycji zostały pomyślnie przeprowadzone, zanim aplikacja zostanie uznana za gotową do przyjmowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie konfigurują rejestrowanie, śledzenie i metryki, które nazywane są czasami filarami obserwowalności. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz omówienie integracji .NET.NET Aspire. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Rejestrowanie
Integracja .NET AspireRabbitMQ używa następujących kategorii dzienników:
RabbitMQ.Client
Śledzenie
Integracja .NET AspireRabbitMQ emituje następujące działania śledzenia przy użyciu OpenTelemetry:
Aspire.RabbitMQ.Client
Metryki
Integracja .NET AspireRabbitMQ obecnie nie obsługuje metryk domyślnie.