Publish-Subscribe en C#: Guía Completa

Introducción: Emisores y suscriptores

Publish-Subscribe (Pub/Sub) permite que múltiples consumidores reciban eventos sin que el productor conozca quién los recibe. El emisor publica en un tópico y los suscriptores reaccionan cuando llega el mensaje.

Este desacoplamiento habilita escalado y evolución independiente: nuevos consumidores se agregan sin tocar al productor, y el sistema puede crecer sin reescribir la lógica central.

El costo es la complejidad operativa: necesitas monitoreo, manejo de reintentos y contratos claros para evitar que un cambio de evento rompa a varios servicios.

Pub/Sub
Prompt: Publish-subscribe topics with multiple consumers, clean minimal style.

1. Naturaleza: Polinización

Las abejas recolectan polen y lo distribuyen a distintas flores sin saber qué plantas lo recibirán.

El polen se “publica” en el entorno y diferentes flores lo “consumen” según su ubicación y ciclo.

En Pub/Sub, el evento es ese polen: se emite una vez y múltiples suscriptores lo procesan con objetivos diferentes.

Polinización
Prompt: Bees pollinating multiple flowers, soft natural illustration.

2. Mundo Real: Notificaciones masivas

Cuando un usuario publica contenido, varios sistemas reaccionan: feed, notificaciones, métricas y recomendaciones.

El productor no llama a cada servicio; solo publica el evento y cada equipo consume según necesidad.

Si mañana aparece un nuevo servicio de análisis, simplemente se suscribe al tópico sin tocar al publicador.

Notificaciones
Prompt: Notification fan-out diagram, clean flat style.

3. Implementación en C#: Código Paso a Paso

public class Topic
{
    public event Action Message;
    public void Publish(string payload) => Message?.Invoke(payload);
}

var topic = new Topic();

// Subscriber A
topic.Message += msg => Console.WriteLine($"A recibió: {msg}");
// Subscriber B
topic.Message += msg => Console.WriteLine($"B recibió: {msg}");

// Publisher
topic.Publish("Pedido creado");

En producción necesitas un broker (Kafka, RabbitMQ, Azure Service Bus) para garantizar entrega, reintentos y escalado.

Define contratos de eventos versionados y consumidores idempotentes para manejar duplicados y fallos parciales.

4. Pub/Sub vs Colas punto a punto

En Pub/Sub, un mismo mensaje puede llegar a múltiples suscriptores. En colas punto a punto, un mensaje se consume una sola vez por un solo consumidor.

Usa Pub/Sub cuando quieras difusión y reactividad; usa colas cuando necesitas balanceo de carga entre workers.

5. Diagrama UML

UML Pub/Sub
Prompt: UML diagram of publish-subscribe pattern, clean vector layout.
Flujo Pub/Sub
Prompt: Pub/Sub flow diagram with topics and subscribers, minimal infographic style.

⚠️ Cuándo NO Usar Pub/Sub

  • Si necesitas orden estricto y procesamiento único por mensaje.
  • Si el sistema es pequeño y la complejidad de un broker no se justifica.
  • Si no puedes manejar la consistencia eventual entre servicios.

💪 Ejercicio

Diseña un tópico de eventos para un e-commerce y define al menos 3 suscriptores con responsabilidades distintas.

Conclusión

Publish-Subscribe es un patrón esencial para sistemas desacoplados y escalables. Permite que nuevas funcionalidades se conecten sin tocar a los productores.

Aplicado con contratos claros e idempotencia, ofrece flexibilidad y evoluciona bien en arquitecturas distribuidas.