0Pricing
AWS Solutions Architect · Lección

Tiempo de espera de visibilidad, DLQ y long polling

Establezca tiempos de espera de visibilidad para evitar que los mensajes se procesen dos veces, envíe los mensajes fallidos a una cola de mensajes fallidos y reduzca costes mediante long polling.

Tiempo de espera de visibilidad, DLQ y long polling es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.

El mecanismo de tiempo de espera de visibilidad

Cuando un consumidor recibe un mensaje de SQS, el mensaje se oculta para todos los demás consumidores durante un período llamado tiempo de espera de visibilidad. Durante este intervalo, el consumidor procesa el mensaje y después lo elimina. Si el consumidor se bloquea o no termina a tiempo, el tiempo de espera de visibilidad expira y el mensaje vuelve a estar visible, lo que permite que otro consumidor lo procese. Este es el mecanismo principal que sustenta la garantía de entrega al menos una vez de SQS.

Configuración del tiempo de espera de visibilidad

El tiempo de espera de visibilidad predeterminado es de 30 segundos. Puede configurarse entre 0 segundos y 12 horas. Establézcalo con un margen suficiente por encima del tiempo máximo de procesamiento previsto: si el procesamiento tarda hasta 2 minutos, establezca el tiempo de espera en al menos 3 o 4 minutos. También puede cambiar el tiempo de espera por recepción mediante change-message-visibility, lo que resulta útil cuando un consumidor detecta que necesita más tiempo para terminar de procesar un mensaje específico.

# Extend visibility timeout for a specific message
aws sqs change-message-visibility \
  --queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
  --receipt-handle 'AQEBwJnKyrHigUMZj...' \
  --visibility-timeout 300

Tiempo de espera demasiado corto frente a demasiado largo

Establecer el tiempo de espera demasiado corto hace que los mensajes reaparezcan antes de que el consumidor termine, lo que provoca un procesamiento duplicado. Establecerlo demasiado largo retrasa que otro consumidor recoja un mensaje si el consumidor original falla silenciosamente (por ejemplo, si se bloquea una instancia de EC2 sin realizar una limpieza correcta). El tiempo de espera óptimo es ligeramente superior al tiempo de procesamiento del percentil 99, pero lo bastante corto para recuperarse rápidamente de los fallos de los consumidores. Supervise la métrica de CloudWatch ApproximateNumberOfMessagesNotVisible para detectar problemas relacionados con el tiempo de espera.

Explicación de las colas de mensajes no entregados

Una cola de mensajes no entregados (DLQ) es una cola de SQS independiente a la que se envían los mensajes después de que fallen al procesarse un número configurable de veces (el maxReceiveCount). Cuando el número de recepciones de un mensaje supera maxReceiveCount, SQS lo mueve automáticamente a la DLQ. Las DLQ evitan que los mensajes problemáticos (mensajes que siempre fallan) bloqueen la cola indefinidamente. Los mensajes de la DLQ pueden inspeccionarse, depurarse y reproducirse después de corregir el error de procesamiento.

Configuración de una cola de mensajes no entregados

Una DLQ no es más que una cola de SQS normal (Standard para un origen Standard y FIFO para un origen FIFO). Configure la política de redirección en la cola de origen para especificar qué cola es la DLQ y cuál es el umbral de maxReceiveCount. Asegúrese de que el período de retención de la DLQ sea más largo que el de la cola de origen: los mensajes llegan tarde a la DLQ y necesita tiempo para investigarlos antes de que caduquen.

aws sqs set-queue-attributes \
  --queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
  --attributes '{
    "RedrivePolicy": "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-1:123456789012:MyDLQ\", \"maxReceiveCount\": \"5\"}"
  }'

Supervisión de la DLQ y configuración de alarmas

Configure una alarma de CloudWatch sobre la métrica ApproximateNumberOfMessagesVisible de la DLQ. Cualquier mensaje que llegue a la DLQ indica un fallo de procesamiento que requiere atención. Configure la alarma para activar una notificación de SNS que avise inmediatamente al ingeniero de guardia. Trate cada mensaje de la DLQ como un error que debe investigarse: los mensajes de la DLQ no deben acumularse silenciosamente. Después de corregir el error, use DLQ Redrive para devolver los mensajes a la cola de origen y reprocesarlos.

DLQ Redrive: reproducción de mensajes

Una vez corregido el error que provocó los fallos de procesamiento, use SQS DLQ Redrive para mover los mensajes de la DLQ a la cola de origen y reprocesarlos. La consola proporciona una función de redirección integrada. Puede filtrar por atributos de mensaje para reproducir únicamente mensajes específicos. Como alternativa, escriba una función de Lambda que sondee la DLQ y reenvíe los mensajes a la cola de origen si necesita una lógica de filtrado personalizada.

# Start DLQ message move task
aws sqs start-message-move-task \
  --source-arn 'arn:aws:sqs:us-east-1:123456789012:MyDLQ' \
  --destination-arn 'arn:aws:sqs:us-east-1:123456789012:MyQueue' \
  --max-number-of-messages-per-second 5

Sondeo corto frente a sondeo largo

De forma predeterminada, SQS utiliza el sondeo corto: una llamada a receive-message consulta un subconjunto aleatorio de servidores y devuelve la respuesta inmediatamente, incluso si no hay mensajes disponibles. Esto genera muchas respuestas vacías y desperdicia llamadas a la API. El sondeo largo espera hasta 20 segundos a que llegue un mensaje antes de devolver una respuesta vacía. El sondeo largo reduce significativamente los costes (menos llamadas a la API) y disminuye la latencia (el mensaje se recibe en cuanto llega, hasta 20 segundos antes que en el siguiente ciclo de sondeo).

Activación del sondeo largo

Active el sondeo largo en el nivel de la cola (se aplica a todas las llamadas de recepción) o por solicitud. La configuración a nivel de cola con ReceiveMessageWaitTimeSeconds establecido en 20 es la recomendada para la mayoría de las aplicaciones. Cuando Lambda utiliza SQS como origen de eventos, usa automáticamente el sondeo largo. Para consumidores basados en EC2, establezca WaitTimeSeconds en la llamada a receive-message.

# Enable long polling at queue level (recommended)
aws sqs set-queue-attributes \
  --queue-url 'https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue' \
  --attributes '{"ReceiveMessageWaitTimeSeconds": "20"}'

# Or per-request
aws sqs receive-message \
  --queue-url 'https://...' \
  --wait-time-seconds 20 \
  --max-number-of-messages 10

Atributos y filtrado de mensajes

Los mensajes de SQS pueden incluir atributos de mensaje: pares de clave-valor de metadatos independientes del cuerpo del mensaje. Los atributos tienen un tipo (String, Number, Binary) y un valor. Cuando SQS está suscrito a un tema de SNS, puede usar políticas de filtro de suscripción de SNS aplicadas a los atributos de mensaje para enrutar únicamente los mensajes relevantes a cada cola. Sin filtrado, cada suscriptor de SQS recibe todas las publicaciones de SNS, independientemente de su contenido.

Colas de retardo y temporizadores de mensajes

Una cola de retardo hace que cada mensaje nuevo permanezca invisible durante un período de retardo (de 0 a 15 minutos) después de enviarse. Esto resulta útil en flujos de trabajo en los que un consumidor no debe procesar un mensaje inmediatamente, por ejemplo, mientras espera a que termine primero un proceso del que depende. También puede establecer un retardo por mensaje mediante DelaySeconds en la llamada de envío, lo que anula el retardo configurado a nivel de cola. Nota: las colas de retardo no están disponibles para las colas FIFO.

# Create a delay queue (5 minute delay)
aws sqs create-queue \
  --queue-name 'DelayedProcessingQueue' \
  --attributes '{"DelaySeconds": "300"}'

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.

Resumen de la lección

En esta lección ha aprendido lo siguiente: Visibility Timeout oculta un mensaje a otros consumidores durante su procesamiento, lo que permite una entrega al menos una vez con reenvío automático si el consumidor falla; las Dead-Letter Queues capturan los mensajes que fallan repetidamente para depurarlos y reproducirlos después de corregir el error; y el Long Polling (un tiempo de espera de hasta 20 segundos) reduce los costes de la API y la latencia en comparación con el sondeo corto. A continuación, exploraremos los temas de SNS y la arquitectura fan-out.

Preguntas frecuentes

¿La lección «Tiempo de espera de visibilidad, DLQ y long polling» es gratis?

Sí — el texto completo de «Tiempo de espera de visibilidad, DLQ y long polling» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué aprenderé en «Tiempo de espera de visibilidad, DLQ y long polling»?

Establezca tiempos de espera de visibilidad para evitar que los mensajes se procesen dos veces, envíe los mensajes fallidos a una cola de mensajes fallidos y reduzca costes mediante long polling. Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AWS Solutions Architect?

No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Tiempo de espera de visibilidad, DLQ y long polling»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?

Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Colas SQS Standard frente a FIFO
  2. Tiempo de espera de visibilidad, DLQ y long polling
  3. Temas de SNS y arquitectura fan-out
  4. Filtrado de mensajes de SQS e integración de SNS + SQS
← Volver a AWS Solutions Architect