Módulo 9 · Eventos, colas y mensajería/Lección 55
SQS: colas de mensajes
Una fila donde los mensajes esperan su turno. Estándar o FIFO, visibilidad y colas de mensajes fallidos.
Amazon Simple Queue Service (SQS) es una cola de mensajes administrada. Un programa deja mensajes; otro los recoge y los procesa cuando puede. No hay servidores que administrar y la cola escala sola con el volumen.
El ciclo de vida de un mensaje
- 1
El productor envía
Una aplicación llama aSendMessage. El mensaje queda guardado en la cola, replicado en varias zonas de disponibilidad. - 2
El consumidor pide
SQS no empuja mensajes. El consumidor hace polling: llama aReceiveMessagey recibe hasta un lote de mensajes. - 3
El mensaje se vuelve invisible
Mientras dura el visibility timeout, ningún otro consumidor ve ese mensaje. Así dos procesos no hacen el mismo trabajo a la vez. - 4
El consumidor borra
Al terminar, el consumidor llama aDeleteMessage. Si no lo borra, el mensaje reaparece cuando vence el tiempo de invisibilidad. - 5
Si nadie lo procesa
El mensaje vence cuando pasa el periodo de retención y se elimina, aunque nadie lo haya leído.
El borrado explícito es la clave: SQS solo da un mensaje por terminado cuando el consumidor lo dice. Si el consumidor se cae a mitad del trabajo, el mensaje vuelve a la cola y otro lo intenta.
4 días
retención por defecto (de 1 minuto a 14 días)
30 s
visibility timeout por defecto (máximo 12 horas)
1 MiB
tamaño máximo de un mensaje
20 s
espera máxima con long polling
Fuente: Amazon SQS Developer Guide, «Amazon SQS message quotas» y referencia de ReceiveMessage, revisado en noviembre de 2026.
Long polling: preguntar sin desesperar
Con short polling, el consumidor pregunta y SQS responde de inmediato, aunque no haya mensajes. Si la cola está vacía, gastas peticiones en respuestas vacías. Con long polling, SQS espera unos segundos a que llegue algo antes de responder. Menos peticiones vacías, menos costo y menos espera para el siguiente mensaje. Úsalo casi siempre.
Estándar o FIFO
| Criterio | ||
|---|---|---|
| Orden | Aproximado: casi siempre en orden, sin garantía | Estricto dentro de cada grupo de mensajes |
| Entrega | Al menos una vez: un mensaje puede llegar duplicado | Procesamiento exactamente una vez: SQS elimina duplicados |
| Rendimiento | Casi ilimitado | Alto, pero con límites por segundo |
| Nombre | Cualquiera | Debe terminar en .fifo |
| Úsala para | Trabajos independientes: miniaturas, correos, procesar archivos | Cuando el orden importa: movimientos de una cuenta, pasos de un pedido |
Con una cola estándar, tu consumidor debe ser idempotente: procesar el mismo mensaje dos veces no debe cobrar dos veces ni enviar dos correos. Una forma simple es guardar el ID de cada mensaje procesado y saltarse los repetidos.
La cola de mensajes fallidos (DLQ)
Algunos mensajes nunca se van a poder procesar: vienen mal formados o apuntan a algo que no existe. Sin control, vuelven a la cola una y otra vez, gastan recursos y estorban. Una dead-letter queue (DLQ) es otra cola de SQS a la que se mueven los mensajes después de un número máximo de intentos (maxReceiveCount).
Ahí quedan apartados para revisarlos. Cuando corriges el problema, puedes devolverlos a la cola original con la función de redrive. Pon una alarma de CloudWatch sobre la DLQ: si recibe mensajes, algo está fallando.
Y si ya tienes un broker de mensajes
Muchas aplicaciones existentes usan brokers como Apache ActiveMQ o RabbitMQ con protocolos estándar (JMS, AMQP, MQTT, STOMP). Reescribirlas para SQS lleva trabajo. Amazon MQ es un servicio administrado de esos brokers: migras sin cambiar el código de mensajería.
Amazon SQS
La fila con fichas de turno
Cola nativa de AWS, serverless, escala sola. La elección por defecto para aplicaciones nuevas.Amazon MQ
Broker administrado de ActiveMQ o RabbitMQ. Para migrar aplicaciones que ya usan esos protocolos.
Una función Lambda puede leer de SQS sin que escribas el ciclo de polling. Detalles en Lambda. Para enviar un mensaje a varias colas a la vez, sigue con SNS.
Quiz
Pon a prueba lo que aprendiste
0 de 5 correctas · 5 sin responder
1.Un consumidor recibe un mensaje de SQS, lo procesa, pero olvida borrarlo. ¿Qué pasa?
2.Una aplicación bancaria debe procesar los movimientos de cada cuenta en el orden exacto en que llegan y sin duplicados. ¿Qué usas?
3.Algunos mensajes fallan una y otra vez y bloquean recursos. ¿Qué configuras?
4.Los consumidores hacen muchas peticiones que vuelven vacías y la factura de SQS sube. ¿Qué ajustas?
5.Una empresa quiere migrar a AWS una aplicación que usa RabbitMQ sin cambiar su código de mensajería. ¿Qué servicio usa?