Este directorio contiene la especificación completa de todos los eventos que se publican y consumen en el sistema de microservicios.
El catálogo de eventos sirve como:
- Contrato entre servicios: Define la estructura que todos deben respetar
- Documentación centralizada: Un solo lugar para ver todos los eventos
- Versionado: Rastrea cambios en eventos a través del tiempo
- Descubrimiento: Facilita encontrar eventos existentes antes de crear nuevos
Cada evento está documentado con:
- Nombre del evento
- Productor: Qué servicio lo publica
- Consumidores: Qué servicios lo consumen
- Schema: Estructura del payload (JSON Schema)
- Versión: Versionado semántico
- Cuándo se publica: Trigger del evento
- Ejemplo: Payload de ejemplo
| Evento | Versión | Consumidores |
|---|---|---|
| OrderCreatedEvent | v1.0 | Inventory, Payments, Notifications |
| OrderConfirmedEvent | v1.0 | Notifications |
| OrderCancelledEvent | v1.0 | Inventory, Notifications |
| OrderShippedEvent | v1.0 | Inventory, Notifications |
| Evento | Productor |
|---|---|
| PaymentApprovedEvent | Payments API |
| PaymentRejectedEvent | Payments API |
| InventoryReservedEvent | Inventory API |
| InventoryReservationFailedEvent | Inventory API |
| Evento | Versión | Consumidores |
|---|---|---|
| InventoryReservedEvent | v1.0 | Orders, Payments |
| InventoryReservationFailedEvent | v1.0 | Orders, Payments |
| InventoryReleasedEvent | v1.0 | Orders |
| LowStockEvent | v1.0 | Notifications |
| OutOfStockEvent | v1.0 | Notifications |
| Evento | Productor |
|---|---|
| OrderCreatedEvent | Orders API |
| OrderCancelledEvent | Orders API |
| OrderShippedEvent | Orders API |
| PaymentRejectedEvent | Payments API |
| Evento | Versión | Consumidores |
|---|---|---|
| PaymentApprovedEvent | v1.0 | Orders, Notifications |
| PaymentRejectedEvent | v1.0 | Orders, Inventory, Notifications |
| PaymentPendingEvent | v1.0 | Orders, Notifications |
| RefundProcessedEvent | v1.0 | Orders, Notifications |
| RefundFailedEvent | v1.0 | Notifications |
| Evento | Productor |
|---|---|
| OrderCreatedEvent | Orders API |
| OrderCancelledEvent | Orders API |
| InventoryReservationFailedEvent | Inventory API |
| Evento | Versión | Consumidores |
|---|---|---|
| NotificationSentEvent | v1.0 | Analytics |
| NotificationFailedEvent | v1.0 | Support System |
| Evento | Productor |
|---|---|
| OrderCreatedEvent | Orders API |
| OrderConfirmedEvent | Orders API |
| OrderCancelledEvent | Orders API |
| OrderShippedEvent | Orders API |
| PaymentApprovedEvent | Payments API |
| PaymentRejectedEvent | Payments API |
| RefundProcessedEvent | Payments API |
| LowStockEvent | Inventory API |
- Formato:
{Entity}{Action}Event - Tiempo verbal: Pasado (representa algo que ya ocurrió)
- Ejemplos:
- ✅
OrderCreatedEvent - ✅
PaymentApprovedEvent - ❌
CreateOrderEvent(imperativo) - ❌
OrderCreate(sin sufijo Event)
- ✅
Todos los eventos deben incluir:
{
"eventId": "guid", // Identificador único del evento
"eventType": "string", // Tipo de evento (ej: OrderCreatedEvent)
"eventVersion": "string", // Versión del schema (ej: v1.0)
"timestamp": "datetime", // Cuándo ocurrió el evento
"correlationId": "guid", // Para rastreo end-to-end
"causationId": "guid", // ID del evento que causó este
"source": "string", // Servicio que publicó (ej: orders-api)
"data": { // Payload específico del evento
// ... datos del evento
}
}- Formato: Semver (
v{major}.{minor}) - Major: Breaking changes (campos removidos, tipos cambiados)
- Minor: Cambios backwards compatible (campos nuevos opcionales)
Estrategia de cambios:
- Non-breaking: Agregar campos opcionales al final
- Breaking: Crear nueva versión del evento con sufijo (ej:
OrderCreatedEventV2) - Mantener versión anterior por período de migración (mínimo 3 meses)
- Máximo recomendado: 256 KB
- Ideal: < 10 KB
- Para datos grandes: Incluir referencia/URL, no el dato completo
❌ NO incluir:
- Contraseñas
- Números completos de tarjeta de crédito
- CVV
- SSN u otros identificadores personales sensibles
✅ Permitido:
- IDs (UUID)
- Tokens
- Últimos 4 dígitos de tarjeta
- Datos ofuscados/hasheados
Notificar que algo ocurrió sin incluir todos los detalles.
Uso: Notificaciones, triggers simples
Ejemplo: OrderShippedEvent
Incluir toda la información necesaria en el evento.
Uso: Cuando consumidores necesitan los datos completos
Ejemplo: OrderCreatedEvent con todos los items
Serie de eventos que representan el estado completo.
Uso: Auditoría completa, reconstrucción de estado
Ejemplo: Historial de cambios de estado de Order
- Los eventos pueden ser entregados más de una vez
- Handlers deben ser idempotentes
- Usar
eventIdpara deduplicación
- No se garantiza orden global
- Se garantiza orden por partition key (ej: OrderId)
- Diseñar handlers para manejar eventos desordenados
- Validar schema de eventos
- Verificar backwards compatibility
- Ejecutar en CI para cada cambio
- Publicar evento de prueba
- Verificar que consumidores lo procesan correctamente
- End-to-end flow testing
Métricas clave:
- Eventos publicados por tipo
- Eventos consumidos por servicio
- Latencia de procesamiento
- Tasa de errores
- Dead letter queue size
Considerar usar AsyncAPI para documentación estructurada de eventos (futuro).
Usar un schema registry para validación automática (futuro).
Cuando cambias un evento existente:
- Análisis de impacto: Identificar todos los consumidores
- Comunicación: Notificar a equipos afectados
- Versionado: Incrementar versión apropiadamente
- Migración gradual:
- Publicar ambas versiones temporalmente
- Migrar consumidores uno por uno
- Deprecar versión antigua
- Documentación: Actualizar este catálogo