Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
FREEDOM251

Freedom251 › Blog › Amazon SQS

Evita que los mensajes tóxicos congelen tu pipeline: reintentos y DLQ

By Freedom251 Team · · 8 min read

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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. 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

  1. 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.
  2. Corrige la causa y confirma en un entorno de prueba que un mensaje representativo se procesa correctamente.
  3. 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.
  4. Vigila los consumidores, la tasa de errores y la cola de destino mientras el lote avanza.
  5. 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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • 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.Support on Ko-Fi

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Amazon SQSApache Kafkabackoffcolas de mensajesdead-letter queueDLQDLTRabbitMQreintentossistemas distribuidosSpring for Apache Kafka

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.