MassTransit para C# (.NET): guía completa con ejemplos prácticos
1. ¿Qué es y para qué sirve?
MassTransit es una potente biblioteca de código abierto y ampliamente utilizada para crear aplicaciones distribuidas en la plataforma .NET. Proporciona una abstracción de alto nivel sobre varios sistemas de mensajería (message brokers), como RabbitMQ, Azure Service Bus, Amazon SQS/SNS, ActiveMQ y Kafka (a través de conectores). El objetivo principal de MassTransit es simplificar el desarrollo de servicios que se comunican mediante mensajes asíncronos, liberando al desarrollador de tener que lidiar con los detalles de bajo nivel de un broker específico.
¿Para qué sirve MassTransit? En la arquitectura moderna de microservicios, los servicios necesitan comunicarse entre sí de forma fiable y asíncrona. En lugar de usar llamadas HTTP directas (que pueden provocar fallos en cascada y un fuerte acoplamiento), se utiliza el intercambio de mensajes. MassTransit se encarga de tareas complejas como: gestión de conexiones y canales, reintentos de envío ante fallos, manejo de errores, transacciones distribuidas (a través de sagas), gestión de colas y tópicos, serialización/deserialización de mensajes, y además ofrece una API cómoda para enviar, publicar y consumir mensajes.
La biblioteca implementa varios patrones clave: Command-Query Separation (mediante el envío de comandos), Publish-Subscribe (publicando eventos), Request-Response (para intercambio síncrono a través de mensajes asíncronos) y Saga Pattern (para gestionar procesos de negocio de larga duración). Gracias a esto, MassTransit es el estándar de facto para construir sistemas distribuidos fiables, escalables y comprobables en .NET.
2. Instalación
MassTransit se instala a través de NuGet. Dependiendo del broker de mensajes que uses, necesitarás instalar el paquete base y el paquete para el transporte específico.
Instalación base (sin transporte):
dotnet add package MassTransit
Para RabbitMQ:
dotnet add package MassTransit.RabbitMQ
Para Azure Service Bus:
dotnet add package MassTransit.Azure.ServiceBus.Core
Para Amazon SQS:
dotnet add package MassTransit.AmazonSQS
Para Kafka:
dotnet add package MassTransit.Kafka
3. Inicio rápido — ejemplo mínimo funcional
A continuación se muestra un ejemplo sencillo de envío y recepción de mensajes usando RabbitMQ. Asegúrate de tener RabbitMQ en ejecución (por ejemplo, con Docker: docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management).
using System;
using System.Threading.Tasks;
using MassTransit;
// 1. Definimos el contrato del mensaje
public record OrderSubmitted
{
public Guid OrderId { get; init; }
public string CustomerName { get; init; }
}
// 2. Definimos el consumidor (Consumer)
public class OrderSubmittedConsumer : IConsumer<OrderSubmitted>
{
public async Task Consume(ConsumeContext<OrderSubmitted> context)
{
var message = context.Message;
Console.WriteLine($"[Consumer] Pedido recibido: {message.OrderId} de {message.CustomerName}");
await Task.CompletedTask;
}
}
// 3. Configuramos e iniciamos el bus
public class Program
{
public static async Task Main()
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint("order-queue", e =>
{
e.Consumer<OrderSubmittedC También en la biblioteca
Cliente HTTP para Java: revisión de las mejores bibliotecas (Java 11, Apache, OkHttp, Retrofit)
Migraciones de bases de datos en Swift: herramientas y prácticas para iOS/macOS
Cliente OAuth para Rust: biblioteca oauth2
Internacionalización (i18n) en TypeScript: biblioteca i18next