What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Un mensaje tóxico (poison message, en la terminología de RabbitMQ) es aquel que falla cada vez que se procesa. Si el consumidor lo reintenta sin límite, o lo deja al frente de una cola ordenada, ese único mensaje consume la capacidad del consumidor y todo lo que viene detrás espera. El patrón que evita ese bloqueo combina cinco decisiones: clasificar el error antes de reintentar, limitar los intentos con backoff, apartar el mensaje agotado en una cola de mensajes muertos (DLQ en Amazon SQS, DLT en Kafka, y un dead-letter exchange o DLX en RabbitMQ) con contexto suficiente para investigarlo, recuperarlo solo después de corregir la causa mediante un redrive controlado, y comprobar cómo todo esto afecta al orden de los mensajes.
Por qué un solo mensaje puede paralizar el consumo
Un consumidor procesa mensajes por orden de llegada, en lotes o por partición. Cuando el manejador lanza una excepción, el broker o el framework vuelve a entregar el mensaje. Si el reintento es inmediato y no tiene tope, el consumidor gasta su tiempo en ese mismo registro. Si además el negocio exige orden, los mensajes posteriores no pueden avanzar hasta que aquel se resuelva o salga del camino. El síntoma visible es un consumo que se detiene, un lag que crece en Kafka o una cola cuya profundidad sube mientras el throughput cae.
As an Amazon Associate I earn from qualifying purchases.
No todos los fallos merecen el mismo tratamiento, y confundirlos es la causa más habitual de bloqueo:
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →| Tipo de fallo | Ejemplo | ¿Tiene sentido reintentar? | Acción |
|---|---|---|---|
| Transitorio | Timeout hacia una base de datos o una API que responde 503 | Sí, de forma acotada y con backoff | Reintento; si se agota, a la DLQ o DLT |
| Permanente | JSON mal formado, campo obligatorio ausente o esquema incompatible | No; el mismo mensaje fallará igual | Apartar o corregir el mensaje, sin ciclos de reintento |
Cómo cortar el bucle: cinco decisiones en orden
El orden importa porque cada decisión depende de la anterior. No tiene sentido fijar un número de intentos si antes no sabes qué errores merecen un segundo intento.
#1 Best Overall
1. Clasifica el error antes de reintentar
Define, por excepción o por código de error, qué puede reintentarse y qué debe salir del flujo sin más intentos. Un timeout o un 503 suelen ser transitorios. Un JSON que no parsea no se arregla esperando.
En Spring for Apache Kafka puedes marcar excepciones como no reintentables para que vayan directamente a DLT; la guía del patrón de retry topics de Spring for Apache Kafka describe ese comportamiento. Kafka Connect también expone reintentos, tolerancia a errores y DLQ como opciones configurables, según la guía de usuario de Kafka Connect. Esa guía vive en la rama trunk del repositorio, no en una versión publicada, así que compárala con la versión que realmente despliegas.
Una clasificación errónea tiene dos costes opuestos. Un error permanente tratado como transitorio se repite hasta agotar el límite, y un error transitorio tratado como permanente manda a la DLQ trabajo que un segundo intento habría completado.
Free tools Windows power users keep installed
One-click scans. No signup required.
2. Limita los intentos y aplica backoff
No existe un número de intentos ni una demora universal. Lo razonable depende de cuánto tarda en recuperarse la dependencia, del acuerdo de nivel de servicio del proceso y de si el orden es obligatorio. Las cifras que aparecen en la documentación de cada plataforma son ejemplos de configuración de esa plataforma, no recomendaciones generales.
| Mecanismo | Dónde se fija el límite | Qué se cuenta | Demora entre intentos |
|---|---|---|---|
| Amazon SQS | Redrive policy con maxReceiveCount |
Veces que el mensaje se recibe sin procesarse correctamente | No indicado en la documentación citada |
| RabbitMQ quorum queues | Límite de entregas (delivery-limit) |
Entregas fallidas que registra la cola para cada mensaje | No indicado en la documentación citada |
| Spring for Apache Kafka | Número de intentos y configuración de backoff | Intentos a través de los retry topics escalonados | Backoff exponencial en los topics de reintento |
| Amazon SNS | Reintentos de entrega a la suscripción | Entregas fallidas a un suscriptor | Backoff; el detalle no se indica en la documentación citada |
El límite debe existir siempre. Un reintento sin tope convierte un fallo permanente en un bucle permanente.
3. Aparta el mensaje agotado con su contexto
Cuando se agotan los intentos, el mensaje sale del flujo principal y entra en la DLQ o DLT. Una DLQ aísla el mensaje; no lo corrige. Para investigarlo después, conviene guardar como mínimo:
Rank #3
- el error: clase de excepción y mensaje;
- el origen: cola o topic y, cuando exista, partición y offset o identificador equivalente;
- el número de intentos y las marcas temporales del primer y del último fallo;
- un identificador de correlación que lo enlace con la petición o el proceso de negocio;
- el payload original o una referencia a él, respetando las reglas de datos personales de tu organización.
Kafka Connect puede activar headers de contexto para los registros enviados a la DLQ, pero las implementaciones no guardan los mismos metadatos ni ofrecen las mismas garantías. No des por hecho que tu framework incluye todos los campos anteriores. Revisa también la retención de la DLQ en la documentación de tu broker: un mensaje que expira antes de que lo investigues se pierde.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →4. Recupera con un redrive controlado
El redrive devuelve mensajes de la DLQ al flujo. Antes de ejecutarlo, la causa debe estar corregida, sea un dato, un fragmento de código o una dependencia. Reintentar contra un sistema todavía roto solo devuelve los mensajes a la DLQ o, peor, sobrecarga la cola de destino.
- Agrupa los mensajes de la DLQ por tipo de error usando el contexto guardado. Si domina un único error, la causa suele ser una sola.
- Corrige la causa y confirma en un entorno de prueba que un mensaje representativo se procesa correctamente.
- Haz redrive de un lote pequeño. Los nombres de menús de la consola cambian con el tiempo; la guía de configuración de DLQ redrive de Amazon SQS describe las opciones vigentes.
- Vigila los consumidores, la tasa de errores y la cola de destino mientras el lote avanza.
- Sube la velocidad de forma gradual, y solo si el lote anterior no ha provocado errores nuevos.
En Amazon SQS, el redrive puede devolver los mensajes a la cola de origen o enviarlos a otro destino. Durante el movimiento no se pueden filtrar ni modificar los mensajes; si necesitas transformarlos o seleccionar solo algunos, hace falta un flujo distinto. La velocidad puede ser la máxima del sistema o una personalizada, y AWS recomienda empezar bajo y subir gradualmente mientras se vigila la cola de destino.
La documentación de Amazon SQS sobre DLQ lo resume así: “The redrive policy redirects messages to a dead-letter queue after the source queue fails to process a message a specified number of times.” (Traducción propia: la política de redrive desvía los mensajes a una DLQ cuando la cola de origen no logra procesarlos el número de veces configurado.) Puedes consultar el texto completo en la documentación de Amazon SQS sobre dead-letter queues.
5. Comprueba el orden y la semántica de entrega
Aquí es donde los patrones dejan de ser intercambiables. Si el orden por clave o por partición es un requisito de negocio, no basta con enviar el mensaje tóxico a otro topic y seguir procesando:
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstall- En Spring for Apache Kafka, los retry topics no bloqueantes sacrifican garantías de orden para el topic. Un reintento que sale del flujo principal puede procesarse después de mensajes que llegaron más tarde.
- En Amazon SQS, una DLQ asociada a una cola FIFO puede romper el orden exacto de los mensajes u operaciones. Antes de activar la política, lee esa advertencia en la documentación de DLQ de Amazon SQS.
- Si el orden es estricto, evalúa si el reintento debe bloquear la partición o la cola. Así se conserva la secuencia, a cambio de que el flujo se detenga mientras dura el reintento.
Cada broker define su propia semántica de orden, así que no traslades estas conclusiones de un producto a otro.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Comparativa de implementaciones
Las implementaciones se comparan con cinco ejes: si el reintento bloquea el flujo, cómo se opera la DLQ, qué garantías de entrega y duplicados se documentan, y el control de acceso al que queda sujeta la recuperación. Cuando la documentación citada no cubre un eje, la celda lo dice.
| Eje | Amazon SQS | RabbitMQ quorum queues | Spring for Apache Kafka | Kafka Connect |
|---|---|---|---|---|
| Bloqueo del flujo durante el reintento | No indicado en la documentación citada | No indicado en la documentación citada | Depende del patrón: los retry topics no bloqueantes sacan el reintento del topic principal | Depende de la configuración de reintentos; la guía citada no detalla el bloqueo |
| Operación de la DLQ | DLQ con redrive a la cola de origen u otro destino, velocidad configurable y permisos propios | Dead-lettering a un DLX; la estrategia y la política dependen de la configuración | Dead-letter topic (DLT) al que llegan los mensajes agotados | Registros enviados a la DLQ, con headers de contexto opcionales; operación de redrive no indicada |
| Garantías de entrega y duplicados | No indicado en la documentación citada | No indicado en la documentación citada | No indicado en la documentación citada | No indicado en la guía citada |
| Control de acceso sobre la recuperación | Redrive sujeto a límites y permisos propios | No indicado en la documentación citada | No indicado en la documentación citada | No indicado en la guía citada |
Las opciones de dead-lettering de RabbitMQ quorum queues dependen de la versión y de la configuración. Revisa la documentación de quorum queues de RabbitMQ 4.2 antes de asumir un comportamiento concreto.
Quick Recap
Diagnóstico: qué significa cada síntoma
| Síntoma | Causa probable | Acción |
|---|---|---|
| El mismo mensaje reaparece con el mismo error y nunca llega a la DLQ | Falta el límite, es demasiado alto, o un error permanente se trata como transitorio | Revisa maxReceiveCount, delivery-limit o el número de intentos, y la lista de excepciones no reintentables |
| El consumo se detiene tras un mensaje concreto y el resto espera | Reintento bloqueante con orden estricto | Limita los intentos; si el orden lo permite, usa un patrón no bloqueante; si no, decide explícitamente qué se bloquea |
| La DLQ crece de golpe tras un despliegue o una caída de dependencia | Fallo sistémico, no mensajes tóxicos aislados | Pausa el redrive, corrige la dependencia o el esquema y recupera después por lotes |
| El redrive devuelve los mensajes a la DLQ en bucle | La causa no se corrigió, o la velocidad o el backoff son insuficientes | Detén el redrive, reclasifica los errores del lote y reduce la velocidad |
| Los mensajes recuperados llegan fuera de orden | Reintento no bloqueante o DLQ asociada a una cola FIFO | Revisa el patrón elegido frente al requisito de orden del paso 5 |
Qué no está establecido
- No hay estudios independientes que cuantifiquen con qué frecuencia aparecen mensajes tóxicos en producción, así que este artículo no ofrece porcentajes.
- Las cifras y nombres de parámetros citados proceden de la documentación de cada plataforma y versión, en la documentación oficial vigente a octubre de 2026. No son estadísticas generales.
- Amazon SNS documenta reintentos con backoff y DLQ para entregas fallidas, pero su modelo es la entrega a suscriptores, no el consumo de una cola. No lo trates como equivalente a los casos anteriores.
- La guía de Kafka Connect citada está en la rama trunk, no en una versión publicada; puede diferir del comportamiento de la versión que usas.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

