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


интеграция .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 add package или Управление зависимостями пакетов в .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

Важный

Пакет NuGet Aspire.RabbitMQ.Client зависит от пакета NuGet RabbitMQ.Client. В выпуске версии 7.0.0 RabbitMQ.Clientпоявилось двоичное критическое изменение. Для решения этой проблемы был создан новый пакет интеграции клиента Aspire.RabbitMQ.Client.v7. Исходный пакет Aspire.RabbitMQ.Client продолжает ссылаться на RabbitMQ.Client версии 6.8.1, обеспечивая совместимость с предыдущими версиями интеграции клиента RabbitMQ. Новый пакет Aspire.RabbitMQ.Client.v7 ссылается на RabbitMQ.Client версии 7.0.0. В будущей версии .NET.NET AspireAspire.RabbitMQ.Client будет обновлен до версии 7.x, а пакет Aspire.RabbitMQ.Client.v7 будет выведен из употребления. Дополнительные сведения см. в разделе Миграция на RabbitMQ.NETClient 7.x.

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

См. также