¿Por qué mi cola FIFO de Amazon SQS no devuelve todos los mensajes o los mensajes en otros grupos de mensajes?

Última actualización: 26/08/2021

Mi cola First-In-First-Out (Primero en entrar, primero en salir, FIFO) de Amazon Simple Queue Service (Amazon SQS) no devuelve algunos mensajes cuando llamo a la API ReceiveMessage. ¿Por qué mi cola FIFO de SQS no devuelve todos los mensajes de un ID de grupo de mensajes específico o de otros grupos de mensajes?

Resolución

En el caso de las colas FIFO, no se puede solicitar recibir mensajes de un ID de grupo de mensajes específico. Cuando se especifica un parámetro MaxNumberOfMessages en la llamada a la API ReceiveMessage, SQS devuelve tantos mensajes con el mismo ID de grupo de mensajes como sea posible. Otros consumidores u otras llamadas a ReceiveMessage pueden procesar mensajes con un ID de grupo de mensajes diferente.

En el caso de las colas FIFO, cuando recibe un mensaje que pertenece a un ID de grupo de mensajes concreto, tenga en cuenta lo siguiente:

  • Debe eliminar o mover los mensajes de la llamada de recepción actual para poder recibir más mensajes del mismo ID de grupo.
    Nota: Los mensajes deben moverse del estado disponible a bordo.
  • No puede recibir mensajes de otros grupos de mensajes.

Una cola FIFO examina los primeros 20 000 mensajes para determinar el grupo de mensajes disponible. Si todos los grupos de mensajes de los primeros 20 000 mensajes están bloqueados debido a mensajes a bordo, no se devolverán los mensajes de otros grupos que superen los primeros 20 000 mensajes. Para obtener más información, consulte Evitar tener una gran cantidad de mensajes atrasados con el mismo ID de grupo.

Ejemplo A

Una cola FIFO tiene un total de 20 001 mensajes. Los primeros 20 000 mensajes pertenecen al grupo de mensajes 1 y el último al grupo de mensajes 2. Cuando intenta recibir mensajes de la cola, solo recibe un mensaje del grupo 1. Las llamadas consecutivas a ReceiveMessage dan como resultado recepciones vacías. Esto sucede porque FIFO solo revisa los mensajes que pertenecen al grupo 1 y ese grupo está bloqueado por la llamada actual.

Ejemplo B

Una cola FIFO tiene un total de 20 000 mensajes. Los primeros 19 999 mensajes pertenecen al grupo de mensajes 1 y el último al grupo de mensajes 2. Cuando intenta recibir mensajes de la cola, la primera llamada ReceiveMessage recibe un mensaje perteneciente al grupo 1. La segunda llamada ReceiveMessage recibe un mensaje perteneciente al grupo 2. Cualquier llamada ReceiveMessage adicional da como resultado recepciones vacías, ya que ambos grupos están bloqueados por las llamadas actuales.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?