Capítulo 5: Enrutamiento de Mensajes¶
Introducción¶
El enrutamiento de mensajes es la inteligencia del sistema de integración. Mientras que los canales proporcionan los conductos y los mensajes proporcionan la carga, los routers son los componentes que toman decisiones: ¿a dónde debe ir este mensaje? ¿Debe dividirse? ¿Debe combinarse con otros? ¿Debe seguir una ruta predefinida o una ruta dinámica? ¿Debe esperar a otros mensajes antes de continuar?
Este capítulo es el más extenso del libro porque el enrutamiento es donde reside la mayor complejidad y la mayor potencia de una arquitectura de integración. Los 12 patrones de routing cubren un espectro completo desde decisiones simples (enviar a canal A o B según un campo del mensaje) hasta orquestaciones complejas de procesos multi-paso con estado, compensación y timeout.
Los Doce Patrones de Routing¶
| Patrón | Pregunta que responde | Complejidad |
|---|---|---|
| Content-Based Router | ¿A dónde va este mensaje según su contenido? | Baja |
| Message Filter | ¿Este mensaje debe descartarse? | Baja |
| Dynamic Router | ¿Cómo se enruta cuando los destinos cambian en runtime? | Media |
| Recipient List | ¿A cuáles de múltiples destinos debe ir este mensaje? | Media |
| Splitter | ¿Cómo se procesa un mensaje compuesto por partes? | Media |
| Aggregator | ¿Cómo se combinan múltiples mensajes relacionados? | Alta |
| Resequencer | ¿Cómo se restaura el orden de mensajes desordenados? | Alta |
| Composed Message Processor | ¿Cómo se procesa un mensaje compuesto manteniendo integridad? | Alta |
| Scatter-Gather | ¿Cómo se consultan múltiples fuentes y se combinan resultados? | Alta |
| Routing Slip | ¿Cómo se define una ruta dinámica dentro del propio mensaje? | Media |
| Process Manager | ¿Cómo se orquesta un proceso multi-paso con estado? | Muy Alta |
| Message Broker | ¿Cómo se centraliza el routing sin acoplar productores y consumidores? | Media |
Taxonomía de Routing¶
Los patrones de routing se pueden clasificar en varias dimensiones:
Por Dirección del Flujo¶
- Routing simple (1 entrada → 1 salida seleccionada): Content-Based Router, Dynamic Router, Message Filter
- Distribución (1 entrada → N salidas): Recipient List, Splitter
- Composición (N entradas → 1 salida): Aggregator, Resequencer
- Composición compleja (N entradas ↔ M salidas): Scatter-Gather, Composed Message Processor
Por Estado¶
- Stateless: Content-Based Router, Message Filter, Dynamic Router, Recipient List, Routing Slip, Message Broker
- Stateful: Aggregator, Resequencer, Scatter-Gather, Process Manager
Los patrones stateful son significativamente más complejos de implementar, operar y escalar porque necesitan mantener estado entre mensajes.
Por Complejidad de Orquestación¶
- Decisión puntual: Content-Based Router, Message Filter (decisión sobre un mensaje individual)
- Composición: Splitter, Aggregator, Resequencer (operaciones sobre conjuntos de mensajes)
- Orquestación: Process Manager, Scatter-Gather (coordinación de flujos multi-paso con estado y timeout)
Relevancia Moderna¶
El routing de mensajes es más relevante que nunca en las arquitecturas modernas:
- Event-driven architectures: EventBridge rules, Kafka Streams branching, Azure Service Bus subscription filters son implementaciones directas de Content-Based Router y Recipient List.
- Microservices orchestration: los saga orchestrators (Temporal, AWS Step Functions, Azure Durable Functions) son implementaciones directas de Process Manager.
- Stream processing: las topologías de Kafka Streams, Flink y Beam implementan Splitter, Aggregator, Content-Based Router y Scatter-Gather como operadores nativos.
- API Gateways: el routing de requests en Kong, Apigee o AWS API Gateway es una forma de Content-Based Router.
Mapa del Capítulo¶
| Patrón | Función | Vigencia |
|---|---|---|
| Content-Based Router | Routing por contenido del mensaje | Alta |
| Message Filter | Descarte de mensajes no deseados | Alta |
| Dynamic Router | Routing con destinos configurables en runtime | Alta |
| Recipient List | Distribución a destinos seleccionados | Alta |
| Splitter | División de mensajes compuestos | Alta |
| Aggregator | Combinación de mensajes relacionados | Alta |
| Resequencer | Restauración de orden | Media |
| Composed Message Processor | Procesamiento de mensajes compuestos con integridad | Media |
| Scatter-Gather | Consulta paralela y combinación de resultados | Alta |
| Routing Slip | Ruta dinámica embebida en el mensaje | Media |
| Process Manager | Orquestación de procesos multi-paso con estado | Alta |
| Message Broker | Hub centralizado de routing | Media |
A continuación, cada patrón de routing se analiza en profundidad.