интеграция .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 в настоящее время не поддерживает метрики по умолчанию.
См. также
.NET Aspire