Wolverine para C# (.NET): guía completa de Message Bus y CQRS
1. ¿Qué es y para qué sirve?
Wolverine es una biblioteca de alto rendimiento para .NET que implementa los patrones Message Bus y CQRS (Command Query Responsibility Segregation). Proporciona a los desarrolladores una herramienta potente y flexible para construir aplicaciones distribuidas, escalables y tolerantes a fallos. A diferencia de muchas alternativas, Wolverine no es solo una abstracción sobre colas de mensajes, sino un framework completo que gestiona el enrutamiento, el manejo de errores, las sagas, los procesos de larga duración y la integración con protocolos de transporte populares (RabbitMQ, Azure Service Bus, Amazon SQS, Kafka, entre otros).
¿Para qué sirve Wolverine? En la arquitectura moderna de microservicios y sistemas basados en eventos, surge a menudo la necesidad de transmitir mensajes de forma fiable entre componentes. Wolverine resuelve este problema ofreciendo:
- Message Bus: Proporciona una transmisión asíncrona, fiable y escalable de mensajes entre servicios.
- CQRS: Separa las operaciones de lectura y escritura de datos, lo que permite optimizar el rendimiento y escalar cada aspecto del sistema de forma independiente.
- Saga: Gestiona procesos de negocio de larga duración que pueden constar de varios pasos y requieren compensación en caso de fallos.
- Integración con ASP.NET Core: Se integra fácilmente en proyectos existentes utilizando mecanismos familiares de DI y middleware.
Wolverine es la elección para quienes buscan el máximo rendimiento y flexibilidad sin sacrificar la facilidad de desarrollo. Es mantenida activamente por la comunidad y se utiliza en entornos de producción.
2. Instalación
Wolverine se instala a través de NuGet. Para empezar, necesitarás el paquete base y, dependiendo del transporte elegido, paquetes adicionales.
Comando de instalación principal:
dotnet add package WolverineFx
Para RabbitMQ:
dotnet add package WolverineFx.RabbitMQ
Para Azure Service Bus:
dotnet add package WolverineFx.AzureServiceBus
Para Amazon SQS:
dotnet add package WolverineFx.AmazonSQS
Para Kafka:
dotnet add package WolverineFx.Kafka
Una vez instalados los paquetes, configura Wolverine en tu archivo Program.cs.
3. Inicio rápido — ejemplo mínimo funcional
Crea una aplicación de consola .NET y añade el paquete WolverineFx. Luego, reemplaza el contenido de Program.cs con el siguiente código:
using Wolverine;
using Microsoft.Extensions.Hosting;
// 1. Creamos el host con Wolverine
using var host = await Host.CreateDefaultBuilder(args)
.UseWolverine(opts =>
{
// Configuración de Wolverine (sin transporte, usando el integrado)
opts.PublishAllMessages().Locally();
})
.StartAsync();
// 2. Obtenemos una instancia de IMessageBus
var bus = host.Services.GetRequiredService();
// 3. Enviamos un mensaje
await bus.SendAsync(new HelloMessage("Mundo"));
// 4. Definimos el manejador (puede estar en cualquier clase)
public class HelloMessageHandler
{
public void Handle(HelloMessage message)
{
Console.WriteLine($"¡Hola, {message.Name}!");
}
}
// 5. Definimos el mensaje
public record HelloMessage(string Name);
Este ejemplo mínimo