Ответ
Да, MassTransit поддерживает отправку сообщений без внешнего брокера через In-Memory Transport. Это полезно для модульного тестирования, локальной разработки или сценариев, где не требуется устойчивость и распределённость полноценного брокера (RabbitMQ, Azure Service Bus).
Пример настройки шины в памяти:
var busControl = Bus.Factory.CreateUsingInMemory(cfg =>
{
cfg.ReceiveEndpoint("test_queue", ep =>
{
ep.Handler<YourMessage>(context =>
{
Console.WriteLine($"Received: {context.Message.Text}");
return Task.CompletedTask;
});
});
});
await busControl.StartAsync();
await busControl.Publish(new YourMessage { Text = "Hello, In-Memory!" });
Ключевые особенности и ограничения In-Memory Transport:
- Жизненный цикл сообщений: Сообщения хранятся только в памяти процесса и теряются при его остановке или перезапуске.
- Распределённость: Не подходит для взаимодействия между разными процессами или машинами — это транспорт в рамках одного приложения.
- Гарантии доставки: Не предоставляет персистентности и гарантий доставки, характерных для брокеров.
- Тестирование: Для интеграционных тестов рекомендуется использовать In-Memory Test Harness, который предоставляет удобные методы проверки отправленных и потреблённых сообщений.
Практический совет: Используйте In-Memory Transport для изоляции бизнес-логики от инфраструктуры в тестах, но для staging- и production-сред всегда настраивайте реальный брокер.