Lógica de entrega de colas FIFO en Amazon SQS - Amazon Simple Queue Service

Lógica de entrega de colas FIFO en Amazon SQS

Los siguientes conceptos aclaran cómo las colas FIFO de Amazon SQS gestionan el envío y la recepción de mensajes, especialmente en lo que respecta al orden de los mensajes y los ID de grupo de mensajes.

Envío de mensajes

Las colas FIFO de Amazon SQS conservan el orden de los mensajes mediante ID de desduplicación e ID de grupo de mensajes únicos. En este tema se subraya la importancia de los ID de grupo de mensajes para mantener un orden estricto en los grupos y se destacan las prácticas recomendadas para garantizar una entrega de mensajes ordenada y fiable entre varios productores.

  1. Preservación de pedidos

    • Cuando se envían varios mensajes de forma sucesiva a una cola FIFO con ID único de desduplicación de mensajes, Amazon SQS los almacena y confirma su transmisión. A continuación, estos mensajes se reciben y procesan en el mismo orden en que se transmitieron.

  2. ID de grupo de mensajes

    • En las colas FIFO, los mensajes se ordenan en función de su ID de grupo de mensajes. Si varios productores o subprocesos envían mensajes con el mismo ID de grupo de mensajes, Amazon SQS garantiza que se almacenen y procesen en el orden en que llegan.

    • Práctica recomendada: para garantizar un orden estricto de los mensajes entre varios productores, asigne un ID de grupo de mensajes único a todos los mensajes de cada productor.

  3. Ordenación por grupos

    • La lógica de las colas FIFO se aplica por ID de grupo de mensajes:

      • Cada ID de grupo de mensajes representa un grupo de mensajes distinto y ordenado.

      • Cada ID de grupo de mensajes contiene mensajes que se envían y reciben por riguroso orden.

      • Los mensajes con diferentes ID de grupo de mensajes pueden llegar o procesarse de forma desordenada unos con respecto a otros.

    • Requisito: debe asociar un ID de grupo de mensajes a cada mensaje. En caso de que se envíe un mensaje sin un ID de grupo, la acción no se llevará a cabo.

    • Escenario de un solo grupo: si necesita que todos los mensajes se procesen siguiendo un orden estricto, utilice el mismo ID de grupo de mensajes para todos los mensajes.

Recepción de mensajes

Las colas FIFO de Amazon SQS gestionan la recuperación de mensajes, incluido el procesamiento por lotes, las garantías de orden FIFO y las limitaciones a la hora de solicitar ID de grupo de mensajes específicos. En este tema se explica cómo Amazon SQS recupera mensajes pertenecientes a un mismo ID o a varios ID de grupo de mensajes, al tiempo que mantiene reglas estrictas de orden y visibilidad.

  1. Recuperación por lotes

    • Cuando se reciben mensajes de una cola FIFO con varios ID de grupo de mensajes, Amazon SQS:

      • Intenta devolver el mayor número posible de mensajes con el mismo ID de grupo de mensajes en una sola llamada.

      • Permite que otros consumidores procesen los mensajes de diferentes ID de grupo de mensajes simultáneamente.

    • Aclaración importante

      • Puede recibir varios mensajes del mismo ID de grupo de mensajes en un solo lote (hasta 10 mensajes en una sola llamada con el parámetro MaxNumberOfMessages).

      • Sin embargo, no podrá recibir mensajes adicionales del mismo ID de grupo de mensajes en solicitudes posteriores hasta que:

        • Se eliminen los mensajes recibidos actualmente; o

        • vuelvan a estar visibles (por ejemplo, una vez transcurrido el tiempo de espera de visibilidad).

  2. Garantía de orden FIFO

    • Los mensajes recuperados en un lote conservan su orden FIFO dentro del grupo.

    • Si hay menos de 10 mensajes disponibles para el mismo ID de grupo de mensajes, Amazon SQS puede incluir mensajes de otros ID de grupos de mensajes en el mismo lote, pero cada grupo conserva el orden FIFO.

  3. Limitaciones del consumidor

    • No puede solicitar de manera explícita la recepción de mensajes de un ID de grupo de mensajes específico.

Varios reintentos

Los productores y consumidores pueden reintentar de forma segura las acciones con errores en las colas FIFO de Amazon SQS sin alterar el orden de los mensajes ni introducir duplicados. En este tema se destaca cómo los ID de desduplicación y los tiempos de espera de visibilidad garantizan la integridad de los mensajes durante los reintentos.

  1. Reintentos en productores

    • Si se produce un error en una acción SendMessage, el productor puede reintentar el envío del mensaje varias veces con el mismo ID de desduplicación del mensaje.

    • Siempre que el productor reciba al menos una confirmación antes de que se agote el intervalo de desduplicación, los reintentos:

      • No introducirán mensajes duplicados.

      • No alterarán el orden de los mensajes.

  2. Reintentos en consumidores

    • Si una acción ReceiveMessage falla, el consumidor puede reintentarlo con el mismo ID de intento de solicitud de recepción tantas veces como sea necesario.

    • Siempre que el consumidor reciba al menos una confirmación antes de que se agote el tiempo de espera de visibilidad, los reintentos:

      • No alterarán el orden de los mensajes.

Notas adicionales sobre el comportamiento FIFO

Obtenga información sobre cómo gestionar los tiempos de espera de visibilidad, habilitar el procesamiento paralelo con varios ID de grupo de mensajes y garantizar un procesamiento secuencial estricto en escenarios de un solo grupo.

  1. Gestión del tiempo de espera de visibilidad

    • Cuando se recupera un mensaje pero no se elimina, permanece invisible hasta que se agote el tiempo de espera de visibilidad.

    • No se devuelve ningún mensaje adicional del mismo ID de grupo de mensajes hasta que se elimina el primer mensaje o vuelve a estar visible.

  2. Simultaneidad y procesamiento paralelo

    • Las colas FIFO permiten el procesamiento paralelo de mensajes a través de diferentes ID de grupo de mensajes.

    • Para maximizar la simultaneidad, diseñe su sistema con varios ID de grupo de mensajes para flujos de trabajo independientes.

  3. Escenarios de un solo grupo

    • Para un procesamiento secuencial estricto de todos los mensajes de una cola FIFO, utilice un único ID de grupo de mensajes para todos los mensajes de la cola.

Ejemplos para una mejor comprensión

A continuación, se muestran escenarios de uso que ilustran el comportamiento de las colas FIFO en Amazon SQS.

  1. Escenario 1: ID de grupo único

    • Un productor envía cinco mensajes con el mismo ID de grupo de mensajes: grupo A.

    • Un consumidor recibe estos mensajes en orden FIFO. Hasta que el consumidor elimine estos mensajes o se agote el tiempo de espera de visibilidad, no se recibirá ningún mensaje adicional del grupo A.

  2. Escenario 2: varios ID de grupo

    • Un productor envía cinco mensajes al grupo A y cinco al grupo B.

    • El consumidor 1 procesa los mensajes del grupo A, mientras que el consumidor 2 procesa los mensajes del grupo B. Esto permite el procesamiento en paralelo con un orden estricto dentro de cada grupo.

  3. Escenario 3: recuperación por lotes

    • Un productor envía siete mensajes al Grupo A y tres al Grupo B.

    • Un único consumidor recupera hasta 10 mensajes. Si la cola lo permite, puede devolver:

      • Siete mensajes del grupo A y tres del grupo B (o menos si hay menos mensajes disponibles de un solo grupo).