Udostępnij za pośrednictwem


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

Modelowanie integracji RabbitMQ hostingu jako typ RabbitMQserver 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 RabbitMQserver

W projekcie hosta aplikacji wywołaj AddRabbitMQ w wystąpieniu builder, aby dodać zasób RabbitMQserver:

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 to w poprzednim przykładzie z obrazem docker.io/library/rabbitmq, tworzy nową instancję RabbitMQserver na komputerze lokalnym. Wspomnienie o RabbitMQserver (zmiennej rabbitmq) jest dodawane do ExampleProject. Zasób RabbitMQserver 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 RabbitMQserver, wywołaj AddConnectionString zamiast tego. Aby uzyskać więcej informacji, zobacz Odwołanie się do istniejących zasobów.

Dodawanie zasobu RabbitMQserver za pomocą wtyczki zarządzania

Aby dodać wtyczkę zarządzania RabbitMQ do zasobu RabbitMQserver, 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 RabbitMQserver. .NET .NET Aspire dodaje inny obraz kontenera docker.io/library/rabbitmq-management do hosta aplikacji obsługującego wtyczkę do zarządzania.

Dodawanie zasobu RabbitMQserver z woluminem danych

Aby dodać wolumin danych do zasobu RabbitMQserver, wywołaj metodę WithDataVolume w zasobie RabbitMQserver:

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

Wolumen danych służy do utrwalania RabbitMQserver danych poza cyklem życia kontenera. Wolumin danych jest instalowany w ścieżce /var/lib/rabbitmq w kontenerze RabbitMQserver, 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 RabbitMQserver z montowaniem powiązań danych

Aby dodać punkt montowania danych do zasobu RabbitMQserver, 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 RabbitMQserver danych między ponownymi uruchomieniami kontenera. Powiązanie danych jest montowane na ścieżce C:\RabbitMQ\Data w systemie Windows (lub /RabbitMQ/Data w Unix) na maszynie hosta oraz w kontenerze RabbitMQserver. Aby uzyskać więcej informacji na temat instalacji powiązań danych, zobacz Docker docs: Bind mounts.

Dodawanie zasobu RabbitMQserver 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 RabbitMQserver. Kontrola stanu sprawdza, czy RabbitMQserver działa i czy można nawiązać z nim połączenie.

Integracja hostingu opiera się na użyciu 📦 AspNetCore.HealthChecks oraz pakietuRabbitmq NuGet.

integracja Client

Aby rozpocząć pracę z integracją .NET AspireRabbitMQclient, zainstaluj 📦Aspire.RabbitMQ.Client pakiet NuGet w projekcie, który wykorzystuje client, czyli projektu aplikacji wykorzystującej RabbitMQclient. Integracja RabbitMQclient rejestruje wystąpienie IConnection , którego można używać do interakcji z RabbitMQ.

dotnet add package Aspire.RabbitMQ.Client

Dodaj RabbitMQclient

W pliku Program.cs projektu używającego client, wywołaj metodę rozszerzenia AddRabbitMQClient na dowolnym IHostApplicationBuilder, aby zarejestrować IConnection do użycia przez kontener 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 RabbitMQserver w projekcie hosta aplikacji. Aby uzyskać więcej informacji, zobacz Dodawanie zasobu RabbitMQserver.

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 z kluczem RabbitMQclient

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 RabbitMQclientJSON, 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 przypisać nazwę client 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ę zdrowia, gdy RabbitMQClientSettings.DisableHealthChecks jest false, próbując nawiązać połączenie i utworzyć kanał na RabbitMQserver.
  • 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.

Zobacz też