Capítulo 7: Endpoints de Mensajería¶
Introducción¶
Los capítulos anteriores han cubierto canales, mensajes, routing y transformación — los componentes internos del sistema de mensajería. Pero queda una pregunta fundamental: ¿cómo se conecta una aplicación de negocio al sistema de mensajería?
Las aplicaciones no nacen con conocimiento nativo de cómo producir y consumir mensajes. Necesitan un componente que haga de puente entre la lógica de aplicación y la infraestructura de mensajería. Ese componente es el Message Endpoint: la interfaz entre el mundo de la aplicación y el mundo del messaging.
Los patrones de este capítulo cubren todos los aspectos de esa interfaz:
- Cómo abstraer la complejidad del messaging de la lógica de aplicación (Gateway, Mapper)
- Cómo gestionar transacciones entre la aplicación y el broker (Transactional Client)
- Cómo recibir mensajes: por polling o por eventos (Polling Consumer, Event-Driven Consumer)
- Cómo escalar el consumo con múltiples instancias (Competing Consumers)
- Cómo distribuir mensajes a handlers específicos (Message Dispatcher)
- Cómo filtrar mensajes en el endpoint (Selective Consumer)
- Cómo sobrevivir a reinicios sin perder mensajes (Durable Subscriber)
- Cómo manejar duplicados de forma segura (Idempotent Receiver)
- Cómo activar lógica de negocio al recibir un mensaje (Service Activator)
Los Once Patrones de Endpoints¶
| Patrón | Pregunta que responde | Área |
|---|---|---|
| Messaging Gateway | ¿Cómo se oculta la complejidad del messaging a la aplicación? | Abstracción |
| Messaging Mapper | ¿Cómo se convierte entre objetos de dominio y mensajes? | Mapeo |
| Transactional Client | ¿Cómo se coordina messaging con transacciones de la aplicación? | Transaccionalidad |
| Polling Consumer | ¿Cómo se consume a demanda, cuando la aplicación está lista? | Consumo pull |
| Event-Driven Consumer | ¿Cómo se consume automáticamente cuando llega un mensaje? | Consumo push |
| Competing Consumers | ¿Cómo se escala el procesamiento con múltiples instancias? | Escalabilidad |
| Message Dispatcher | ¿Cómo se distribuye a handlers especializados en un solo proceso? | Distribución interna |
| Selective Consumer | ¿Cómo se consume solo mensajes que cumplen ciertos criterios? | Filtrado |
| Durable Subscriber | ¿Cómo se evita perder mensajes durante downtime? | Durabilidad |
| Idempotent Receiver | ¿Cómo se manejan mensajes duplicados de forma segura? | Idempotencia |
| Service Activator | ¿Cómo se invoca lógica de negocio al recibir un mensaje? | Activación |
Mapa del Capítulo¶
| Patrón | Función | Vigencia |
|---|---|---|
| Messaging Gateway | Abstracción de messaging | Alta |
| Messaging Mapper | Conversión dominio ↔ mensaje | Alta |
| Transactional Client | Transaccionalidad messaging + app | Alta |
| Polling Consumer | Consumo pull-based | Alta |
| Event-Driven Consumer | Consumo push-based | Alta |
| Competing Consumers | Escalabilidad horizontal de consumo | Alta |
| Message Dispatcher | Distribución interna a handlers | Media |
| Selective Consumer | Filtrado en el endpoint | Media |
| Durable Subscriber | Consumo resiliente a downtime | Alta |
| Idempotent Receiver | Manejo seguro de duplicados | Alta |
| Service Activator | Activación de lógica de negocio | Alta |
A continuación, cada patrón de endpoint se analiza en profundidad.