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


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

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

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

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

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

dotnet add package Aspire.Hosting.RabbitMQ

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

Добавить ресурс сервера RabbitMQ

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

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, он создает новый экземпляр сервера RabbitMQ на локальном компьютере. Ссылка на сервер RabbitMQ (переменная rabbitmq) добавляется в ExampleProject. Ресурс сервера RabbitMQ включает учетные данные по умолчанию с username, равным "guest", и случайно созданными password с использованием метода CreateDefaultPasswordParameter.

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

Подсказка

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

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

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

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

Добавление ресурса сервера RabbitMQ с объемом данных

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

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

Добавить ресурс сервера RabbitMQ с привязкой данных

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

Важный

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

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

Добавление ресурса сервера RabbitMQ с параметрами

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

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 автоматически добавляет проверку состояния для ресурса сервера RabbitMQ. Проверка работоспособности проверяет, запущен ли сервер RabbitMQ и что к нему можно установить подключение.

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

интеграция Client

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

dotnet add package Aspire.RabbitMQ.Client

Добавьте клиента RabbitMQ

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

builder.AddRabbitMQClient(connectionName: "messaging");

Подсказка

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

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

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

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

Добавить клиента с ключом RabbitMQ

Могут возникнуть случаи, когда требуется зарегистрировать несколько экземпляров 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
      }
    }
  }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • RabbitMQ.Client

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

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

  • Aspire.RabbitMQ.Client

Метрика

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

См. также