Поделиться через


интеграция .NET AspireRabbitMQ

Включает:интеграция хостинга и Client интеграции

RabbitMQ — это надежный брокер обмена сообщениями и потоковой передачи, который легко развертываться в облачных средах, локальной среде и на локальном компьютере. Интеграция .NET AspireRabbitMQ позволяет подключаться к существующим экземплярам RabbitMQ или создавать новые экземпляры из .NET с помощью docker.io/library/rabbitmq образа контейнера.

Интеграция хостинга

Интеграция RabbitMQ моделирует RabbitMQserver как тип RabbitMQServerResource. Чтобы получить доступ к этому типу и его API, добавьте пакет NuGet 📦Aspire.Housing.RabbitMQ в проект узла приложения .

dotnet add package Aspire.Hosting.RabbitMQ

Для получения дополнительной информации см. в статье о команде dotnet добавить пакет или в статье Управление зависимостями пакетов в приложениях .NET.

Добавьте ресурс RabbitMQserver

В проекте узла приложения вызовите AddRabbitMQ на экземпляре builder, чтобы добавить ресурс RabbitMQserver:

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

Когда .NET.NET Aspire добавляет образ контейнера в узел приложения, как показано в предыдущем примере с образом docker.io/library/rabbitmq, он создает новый экземпляр RabbitMQserver на локальном компьютере. Ссылка на RabbitMQserver (переменная rabbitmq) добавляется в ExampleProject. Ресурс RabbitMQserver включает учетные данные по умолчанию с username"guest" и случайно созданными password с помощью метода CreateDefaultPasswordParameter.

Метод WithReference настраивает подключение в ExampleProject с именем "messaging". Дополнительные сведения см. в жизненном цикле ресурсов контейнера.

Подсказка

Если вы хотите подключиться к существующей RabbitMQserver, вызовите AddConnectionString вместо этого. Дополнительные сведения см. в статье Справочник по существующим ресурсам.

Добавьте ресурс RabbitMQserver с плагином управления

Добавляя подключаемый модуль управления в ресурс , вызовите метод .

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithManagementPlugin();

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

Подключаемый модуль управления RabbitMQ предоставляет API на основе HTTP для управления и мониторинга RabbitMQserver. .NET .NET Aspire добавляет ещё один образ контейнера docker.io/library/rabbitmq-management на хост приложения, на котором выполняется подключаемый модуль управления.

Добавить ресурс RabbitMQserver с объемом данных

Чтобы добавить том данных в ресурс RabbitMQserver, вызовите метод WithDataVolume в ресурсе 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...

Том данных используется для сохранения RabbitMQserver данных за пределами жизненного цикла контейнера. Том данных монтируется по пути /var/lib/rabbitmq в контейнере RabbitMQserver, и если параметр name не указан, имя генерируется случайным образом. Дополнительные сведения о томах данных и сведения о том, почему они предпочтительнее привязки, см. в Docker документации по томам.

Добавление ресурса RabbitMQserver с подключением привязки данных

Чтобы добавить подключение привязки данных к ресурсу RabbitMQserver, вызовите метод 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...

Важный

Подключения привязки данных имеют ограниченные функциональные возможности по сравнению с томами, которые обеспечивают более высокую производительность, переносимость и безопасность, что делает их более подходящими для рабочих сред. Однако привязываемые подключения позволяют напрямую получать доступ и изменять файлы в хост-системе, идеально подходит для разработки и тестирования, в которых требуются изменения в режиме реального времени.

Подключения привязки данных зависят от файловой системы хост-компьютера для сохранения RabbitMQserver данных во время перезапуска контейнера. Привязка данных монтируется в точке C:\RabbitMQ\Data в Windows (или /RabbitMQ/Data на пути Unix) на машине-хосте в контейнере RabbitMQserver. Дополнительные сведения о подключениях привязки данных см. в документации по Docker: привязка подключений.

Добавьте ресурс RabbitMQserver с параметрами

Если вы хотите явно указать имя пользователя и пароль, используемые образом контейнера, эти учетные данные можно указать в качестве параметров. Рассмотрим следующий альтернативный пример:

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

Дополнительные сведения о предоставлении параметров см. в разделе Внешние параметры.

Проверка работоспособности интеграции хостинга

Интеграция хостинга RabbitMQ автоматически добавляет проверку состояния системы для ресурса RabbitMQserver. Проверка работоспособности проверяет, запущена ли RabbitMQserver и что к нему можно установить подключение.

Интеграция размещения зависит от пакета NuGet AspNetCore.HealthChecks. .

интеграция Client

Чтобы приступить к работе с интеграцией .NET AspireRabbitMQclient, установите пакет NuGet 📦Aspire.RabbitMQ.Client в проект-потребитель client, то есть в проект приложения, использующего RabbitMQclient. Интеграция RabbitMQclient регистрирует экземпляр IConnection, который можно использовать для взаимодействия с RabbitMQ.

dotnet add package Aspire.RabbitMQ.Client

Добавьте RabbitMQclient

В файле Program.cs проекта, использующего client, вызовите метод расширения AddRabbitMQClient на любом IHostApplicationBuilder, чтобы зарегистрировать IConnection для использования с помощью контейнера внедрения зависимостей. Метод принимает параметр имени подключения.

builder.AddRabbitMQClient(connectionName: "messaging");

Подсказка

Параметр connectionName должен соответствовать имени, используемому при добавлении ресурса RabbitMQserver в проект узла приложения. Дополнительные сведения см. в разделе Добавьте ресурсserverRabbitMQ.

Затем можно получить экземпляр IConnection с помощью внедрения зависимостей. Например, чтобы получить подключение от примерного сервиса:

public class ExampleService(IConnection connection)
{
    // Use connection...
}

Дополнительные сведения о внедрении зависимостей см. в .NET внедрение зависимостей.

Добавить ключи RabbitMQиclient

Могут возникнуть случаи, когда требуется зарегистрировать несколько экземпляров IConnection с разными именами соединений. Чтобы зарегистрировать клиентов с ключом RabbitMQ, вызовите метод AddKeyedRabbitMQClient.

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

Затем можно получить экземпляры IConnection с помощью dependency injection. Например, чтобы получить подключение из примера службы:

public class ExampleService(
    [FromKeyedServices("chat")] IConnection chatConnection,
    [FromKeyedServices("queue")] IConnection queueConnection)
{
    // Use connections...
}

Дополнительные сведения о ключевых службах см. в разделе .NET внедрение зависимостей: ключевые службы.

Конфигурация

Интеграция .NET AspireRabbitMQ предоставляет несколько вариантов настройки подключения на основе требований и соглашений проекта.

Используйте строку подключения

При использовании строки подключения из раздела конфигурации ConnectionStrings можно указать имя строки подключения при вызове метода AddRabbitMQClient:

builder.AddRabbitMQClient(connectionName: "messaging");

Затем строка подключения извлекается из раздела конфигурации ConnectionStrings:

{
  "ConnectionStrings": {
    "messaging": "amqp://username:password@localhost:5672"
  }
}

Дополнительные сведения о форматировании этой строки подключения см. в документации по спецификации RabbitMQ URI.

Использование поставщиков конфигураций

Интеграция .NET AspireRabbitMQ поддерживает Microsoft.Extensions.Configuration. Он загружает RabbitMQClientSettings из конфигурации, используя ключ Aspire:RabbitMQ:Client. Следующий фрагмент кода является примером файла appsettings.json, который настраивает некоторые параметры:

{
  "Aspire": {
    "RabbitMQ": {
      "Client": {
        "ConnectionString": "amqp://username:password@localhost:5672",
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "MaxConnectRetryCount": 2
      }
    }
  }
}

Для полной схемы интеграции RabbitMQclientJSON см. Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Использование встроенных делегатов

Кроме того, можно использовать делегат Action<RabbitMQClientSettings> configureSettings, чтобы настроить некоторые или все параметры непосредственно, например, отключить проверку работоспособности прямо из кода.

builder.AddRabbitMQClient(
    "messaging",
    static settings => settings.DisableHealthChecks = true);

Вы также можете настроить IConnectionFactory с помощью параметра делегата Action<IConnectionFactory> configureConnectionFactory метода AddRabbitMQClient. Например, чтобы задать указанное имя для подключений client:

builder.AddRabbitMQClient(
    "messaging",
    configureConnectionFactory:
        static factory => factory.ClientProvidedName = "MyApp");

Client проверки работоспособности интеграции

По умолчанию .NET.NET Aspire интеграции включают проверки работоспособности для всех служб. Дополнительные сведения см. в обзоре интеграции .NET.NET Aspire.

Интеграция .NET AspireRabbitMQ:

  • Добавляет проверку работоспособности, когда RabbitMQClientSettings.DisableHealthChecks — это false, которая пытается подключиться к RabbitMQserverи создать канал.
  • Интегрируется с конечной точкой HTTP /health, которая указывает, что все зарегистрированные проверки работоспособности должны передаваться для того, чтобы приложение считалось готовым принять трафик.

Наблюдаемость и телеметрия

.NET .NET Aspire интеграции автоматически настраивают конфигурации журналов, трассировки и метрик, которые иногда называются основами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации .

Лесозаготовка

Интеграция .NET AspireRabbitMQ использует следующие категории журналов:

  • RabbitMQ.Client

Отслеживание

Интеграция .NET AspireRabbitMQ испускает следующие действия трассировки с использованием OpenTelemetry:

  • Aspire.RabbitMQ.Client

Метрика

Интеграция .NET AspireRabbitMQ в настоящее время не поддерживает метрики по умолчанию.

См. также