Udostępnij za pośrednictwem


integracja .NET AspireRabbitMQ

Obejmuje:integracja hostingu obejmuje integrację hostingu — Client integracja dołączonaClient

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 umożliwia łączenie się z istniejącymi wystąpieniami lub tworzenie nowych wystąpień z przy użyciu obrazu kontenera .

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ądzanie 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łaj się do istniejących zasobów.

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 dotyczących tego, dlaczego są preferowane nad montowaniem powiązanym, zobacz Docker dokumentację: Woluminy.

Dodaj zasób serwera RabbitMQ z montowaniem danych

Aby dodać punkt montowania 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

Powiązania montowania danych mają ograniczoną funkcjonalność w porównaniu z woluminami , które oferują lepszą wydajność, przenośność i bezpieczeństwo, co czyni je bardziej odpowiednimi w środowiskach 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 (Dokumentacja: instalacje powiązane).

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 dostarczania parametrów, zobacz Parametry zewnętrzne.

Dodawanie zasobu serwera RabbitMQ za pomocą wtyczki zarządzania

Aby dodać wtyczkęRabbitMQ zarządzania do RabbitMQ zasobu serwera, wywołaj metodę WithManagementPlugin . Pamiętaj, aby użyć parametrów do ustawienia poświadczeń dla kontenera. Te poświadczenia będą potrzebne do zalogowania się do wtyczki zarządzania:

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

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. Wtyczkę zarządzania można uzyskać z poziomu pulpitu nawigacyjnego .NET Aspire , wybierając punkt końcowy zasobu RabbitMQ :

RabbitMQ

Zaloguj się do wtyczki zarządzania przy użyciu poświadczeń skonfigurowanych przy użyciu parametrów:

Zrzut ekranu przedstawiający wtyczkę RabbitMQ zarządzania.

Przeprowadzanie sprawdzania kondycji integracji systemów

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ą .NET AspireRabbitMQ klienta, zainstaluj pakiet NuGet 📦Aspire.RabbitMQ.Client w projekcie korzystającym z klienta, to znaczy w projekcie aplikacji korzystającej z RabbitMQ klienta. Integracja RabbitMQ klienta rejestruje wystąpienie IConnection , którego można użyć do interakcji z usługą RabbitMQ.

dotnet add package Aspire.RabbitMQ.Client

Ważny

Pakiet NuGet Aspire.RabbitMQ.Client zależy od pakietu NuGet RabbitMQ.Client. Wraz z wydaniem wersji 7.0.0 RabbitMQ.Clientwprowadzono zmianę powodującą niezgodność binarną. Aby rozwiązać ten problem, został utworzony nowy pakiet integracji klienta Aspire.RabbitMQ.Client.v7. Oryginalny pakiet Aspire.RabbitMQ.Client nadal odwołuje się do RabbitMQ.Client w wersji 6.8.1, zapewniając zgodność z poprzednimi wersjami integracji klienta RabbitMQ. Nowy pakiet Aspire.RabbitMQ.Client.v7 odnosi się do wersji RabbitMQ.Client 7.0.0. W przyszłej wersji .NET.NET AspireAspire.RabbitMQ.Client zostaną zaktualizowane do wersji 7.x, a pakiet Aspire.RabbitMQ.Client.v7 zostanie wycofany. Aby uzyskać więcej informacji, zobacz Migrowanie do RabbitMQ.NETClient wersji 7.x.

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 Dodawanie RabbitMQ zasobu 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 z kluczem RabbitMQ, wywołaj metodę AddKeyedRabbitMQClient.

builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");

Następnie można pobrać wystąpienia IConnection za pomocą 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 dokumenty specyfikacji URIRabbitMQ.

Korzystanie z dostawców konfiguracji

Integracja .NET AspireRabbitMQ obsługuje Microsoft.Extensions.Configuration. Ładuje RabbitMQClientSettings z konfiguracji, używając 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 RabbitMQ schemat integracji JSON klienta, zobacz Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Używaj delegatów wewnętrznych

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żesz 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 sprawdzanie stanu integracji

Domyślnie .NET.NET Aspire integracje umożliwiają sprawdzanie kondycji wszystkich usług. Aby uzyskać więcej informacji, zobacz .NET.NET Aspire omówienie integracji.

Integracja .NET AspireRabbitMQ:

  • Dodaje sprawdzanie stanu zdrowia, gdy RabbitMQClientSettings.DisableHealthChecks jest false, próbując 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ą konfiguracje rejestrowania, śledzenia i metryk, które są czasami nazywane filarami obserwacji. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz .NET.NET Aspire Omówienie integracji. 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.

Zobacz też