La dead letter queue olvidada
El pipeline muestra throughput normal y cero errores mientras pierde el 14% de los mensajes: los errores se fueron a una cola que nadie mira.
📈 Que cambia para el negocio
Elimina la perdida silenciosa de datos y convierte 'se proceso' en una afirmacion sobre la que se puede construir: conciliaciones, garantias de entrega, SLA de procesamiento.
💼 Que demuestra tecnicamente
Muestra que un consumidor que captura el error, no se muere y sigue esta haciendo exactamente lo que se le pidio — y que sin la otra mitad eso es perdida de datos con buenos modales. El 71,39% de esa DLQ se recupera sin cambiar una linea de codigo.
✅ Evidencia que deja
- Contrasta /consume-silent y /consume-observed: 13,87% de dead-letter contra 3,97%.
- Drena la DLQ del consumidor silencioso y recupera el 71,39%: trabajo que nunca debio tirarse.
- Expone by_error_class y dlq_oldest_msg_age_ms, que convierten un numero en un diagnostico.
👀 Que mirar al ejecutarlo
- Si el error rate del servicio es cero mientras dead_letter_rate_pct esta en 13,87%.
- Si by_error_class dice 'unclassified' en la variante silenciosa y desglosa cuatro clases en la otra.
- Si el drenaje del silencioso recupera el 71,39% y el del observado recupera cero: ahi solo hay veneno.
Como esta resuelto en cada stack
Cierra el arco del caso 15, donde la DLQ nace como politica de rechazo. Clasificacion transitorio vs venenoso con la primitiva de cada runtime: enum + match exhaustivo en Rust —una clase de error nueva NO COMPILA— y panic! como canal separado de Result, filtros catch(e) when(...) en .NET que deciden ANTES de desenrollar la pila, jerarquia sealed...permits en Java, errors.Is/errors.As sobre cadenas %w en Go, catch(A|B) con Throwable en PHP mas drenaje por cron, jerarquia de excepciones en Python con el peligro del except Exception, e instanceof fragil por diseño en Node. Mas DLQ observable (profundidad, antiguedad, desglose por clase, muestreo) y replay
| Stack | Health check local | Compose | Detalle |
|---|---|---|---|
| 🐘 PHP 8.3 | http://localhost:8100/20/health | compose.root.yml | README del stack |
| 🐍 Python 3.12 | http://localhost:8200/20/health | compose.python.yml | README del stack |
| 🟢 Node.js 22 | http://localhost:8300/20/health | compose.nodejs.yml | README del stack |
| ☕ Java 21 | http://localhost:8400/20/health | compose.java.yml | README del stack |
| 🔵 .NET 8 | http://localhost:8500/20/health | compose.dotnet.yml | README del stack |
| 🐹 Go 1.23 | http://localhost:8600/20/health | compose.go.yml | README del stack |
| 🦀 Rust 1.83 | http://localhost:8700/20/health | compose.rust.yml | README del stack |
El expediente completo
El caso no empieza en el codigo: empieza en el sintoma y termina en el postmortem.