Escenarios de recuperación de interrupciones en Amazon SQS - Amazon Simple Queue Service

Escenarios de recuperación de interrupciones en Amazon SQS

El proceso de desduplicación en las colas FIFO está sujeto a limitación temporal. Al diseñar una aplicación, asegúrese de que tanto el productor como el consumidor puedan recuperarse de las interrupciones del cliente o de la red sin introducir duplicados o errores de procesamiento.

Consideraciones sobre el productor

  • Amazon SQS aplica un intervalo de desduplicación de 5 minutos.

  • Si un productor vuelve a intentar una solicitud SendMessage transcurridos 5 minutos, Amazon SQS la considera como un mensaje nuevo, lo que podría crear duplicados.

Consideraciones sobre el consumidor

  • Si un consumidor no procesa un mensaje antes de que se agote el tiempo de espera de visibilidad, puede que otro consumidor lo reciba y procese, lo que daría lugar a una duplicación del procesamiento.

  • Ajuste el tiempo de espera de visibilidad en función del tiempo de procesamiento de la aplicación.

  • Use la API ChangeMessageVisibility para ampliar el tiempo de espera mientras se procesa un mensaje.

  • Si un mensaje no se puede procesar repetidamente, diríjalo a una cola de mensajes fallidos (DLQ) en lugar de permitir que se vuelva a procesar por tiempo indefinido.

  • El productor debe estar al tanto del intervalo de desduplicación de la cola. Amazon SQS tiene un intervalo mínimo de desduplicación de cinco minutos. El reintento de solicitudes SendMessage después de que finalice el intervalo de desduplicación puede introducir mensajes duplicados en la cola. Por ejemplo, un dispositivo móvil en un automóvil envía mensajes cuyo orden es importante. Si el automóvil pierde la conectividad móvil durante un periodo de tiempo antes de recibir un reconocimiento, el reintento de la solicitud después de recuperar la conectividad móvil puede crear un duplicado.

  • El consumidor debe tener un tiempo de espera de visibilidad que minimice el riesgo de no poder procesar los mensajes antes de que finalice el tiempo de espera de visibilidad. Para ampliar el tiempo de espera de visibilidad mientras se procesan los mensajes, llame a la acción ChangeMessageVisibility. Sin embargo, si el tiempo de espera de visibilidad finaliza, otro consumidor puede comenzar inmediatamente a procesar los mensajes, lo que hará que un mensaje se procese varias veces. Para evitar esta situación, configure una cola de mensajes fallidos.