Colas de mensajes fallidos de Amazon SQS - Amazon Simple Queue Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Colas de mensajes fallidos de Amazon SQS

Amazon SQS admite colas de mensajes fallidos (DLQ), a las que otras colas (las colas de origen) pueden enviar mensajes que no se puedan procesar (consumir) correctamente. Las colas de mensajes fallidos resultan útiles para depurar la aplicación o el sistema de mensajería, ya que le permiten aislar los mensajes sin consumir para determinar por qué no se procesaron correctamente. Para obtener información sobre la configuración de una cola de mensajes fallidos mediante la consola de Amazon SQS, consulte Configuración de una cola de mensajes fallidos (consola). Una vez que haya depurado la aplicación consumidora o esta esté disponible para consumir el mensaje, puede utilizar la capacidad de redireccionamiento de cola de mensajes fallidos para devolver los mensajes a la cola de origen.

importante

Amazon SQS no crea la cola de mensajes fallidos automáticamente. Primero deberá crear la cola antes de utilizarla como una cola de mensajes fallidos.

¿Cómo funcionan las colas de mensajes fallidos?

A veces, los mensajes no se pueden procesar debido a una serie de problemas posibles, como, por ejemplo, condiciones erróneas dentro de la aplicación productora o consumidora, o un cambio de estado inesperado que provoca un problema con el código de la aplicación. Por ejemplo, si un usuario realiza un pedido en una página web con un ID de producto determinado, pero el ID del producto se ha eliminado, el código de la tienda web muestra un error, y el mensaje con la solicitud de pedido se envía a una cola de mensajes fallidos.

Ocasionalmente, puede que los productores y los consumidores no interpreten aspectos del protocolo que utilizan para comunicarse entre sí, lo que puede provocar daños o pérdidas de mensajes. Además, los errores de hardware del consumidor podrían dañar la carga del mensaje.

La política de redireccionamiento especifica la cola de origen, la cola de mensajes fallidos y las condiciones bajo las cuales Amazon SQS mueve los mensajes de la primera a la segunda si el consumidor de la cola de origen no puede procesar un mensaje un número especificado de veces. maxReceiveCount es el número de veces que un consumidor intenta recibir un mensaje de una cola sin eliminarlo antes de que se traslade a la cola de mensajes fallidos. Si maxReceiveCount se establece a un valor bajo, como 1, cualquier error en la recepción de un mensaje hará que este se traslade a la cola de mensajes fallidos. Entre estos errores se incluyen los errores de red y los errores de dependencia de cliente. Para asegurarse de que su sistema es resiliente frente a los errores, establezca maxReceiveCount lo suficientemente alto como para permitir un número suficiente de reintentos.

La política de permiso de redireccionamiento especifica qué colas de origen pueden acceder a la cola de mensajes fallidos. Esta política se aplica a una posible cola de mensajes fallidos. Puede elegir entre permitir todas las colas de origen, permitir colas de origen específicas o denegar todas las colas de origen. De forma predeterminada, se permite que todas las colas de origen utilicen la cola de mensajes fallidos. Si elige permitir colas específicas (mediante la opción byQueue), puede especificar hasta diez colas de origen con el nombre de recurso de Amazon (ARN) de la cola de origen. Si especifica denyAll, la cola no se puede utilizar como una cola de mensajes fallidos.

Para especificar una cola de mensajes fallidos, puede utilizar la consola o los AWS SDK. Debe hacerlo para cada cola que envíe mensajes a una cola de mensajes fallidos. Varias colas del mismo tipo pueden dirigirse a una sola cola de mensajes fallidos. Para obtener más información, consulte Configuración de una cola de mensajes fallidos (consola) y los atributos RedrivePolicy y RedriveAllowPolicy de la acción CreateQueue o SetQueueAttributes.

importante

La cola de mensajes fallidos de una cola FIFO también debe ser una cola FIFO. De igual manera, la cola de mensajes fallidos de una cola estándar también debe ser una cola estándar.

Debe utilizar la misma Cuenta de AWS para crear la cola de mensajes fallidos y las demás colas que envían mensajes a la cola de mensajes fallidos. Además, las colas de mensajes fallidos deben residir en la misma región que el resto de colas que utilizan la cola de mensajes fallidos. Por ejemplo, si crea una cola en la región Este de EE. UU. (Ohio) y desea utilizar una cola de mensajes fallidos con esa cola, la segunda cola también debe estar en la región Este de EE. UU. (Ohio).

En el caso de las colas estándar, la caducidad de un mensaje siempre se basa en su marca temporal original. Cuando un mensaje se mueve a una cola de mensajes fallidos, la marca temporal de la cola no se modifica. La métrica ApproximateAgeOfOldestMessage indica cuándo el mensaje pasó a la cola de mensajes fallidos, no cuándo se envió originalmente. Por ejemplo, supongamos que un mensaje pasa un día en la cola original antes de ser trasladado a una cola de mensajes fallidos. Si el periodo de retención de la cola de mensajes fallidos es de cuatro días, el mensaje se elimina de la cola de mensajes fallidos al cabo de tres días y ApproximateAgeOfOldestMessage es de tres días. Por lo tanto, se recomienda establecer siempre un periodo de retención de una cola de mensajes fallidos superior al periodo de retención de la cola original.

Para las colas FIFO, la marca temporal de entrada se restablece cuando el mensaje se mueve a una cola de mensajes fallidos. La métrica ApproximateAgeOfOldestMessage indica cuándo el mensaje ha pasado a la cola de mensajes fallidos. En el mismo ejemplo anterior, el mensaje se elimina de la cola de mensajes fallidos al cabo de cuatro días y ApproximateAgeOfOldestMessage es de cuatro días.

¿Cuáles son los beneficios de las colas de mensajes fallidos?

La principal tarea de una cola de mensajes fallidos es ocuparse del ciclo de vida de los mensajes no consumidos. Una cola de mensajes fallidos le permite apartar y aislar los mensajes que no se pueden procesar correctamente para determinar por qué no se procesaron correctamente. La configuración de una cola de mensajes fallidos le permite hacer lo siguiente:

  • Configurar una alarma para todos los mensajes que se mueven a una cola de mensajes fallidos.

  • Examinar los registros para ver si hay excepciones que podrían haber causado el traslado de mensajes a una cola de mensajes fallidos.

  • Analizar el contenido de los mensajes movidos a una cola de mensajes fallidos para diagnosticar problemas de software o problemas de hardware del productor o el consumidor.

  • Determinar si ha concedido al consumidor tiempo suficiente para procesar los mensajes.

¿Cómo gestionan los diferentes tipos de cola los errores en los mensajes?

Colas estándar

Las colas estándar siguen procesando mensajes hasta que termina el periodo de retención. El procesamiento continuo de los mensajes minimiza las posibilidades de que la cola quede bloqueada por los mensajes que no se pueden procesar. El procesamiento continuo de mensajes también proporciona una recuperación más rápida de su cola.

En un sistema que procesa miles de mensajes, el hecho de tener un gran número de mensajes que el consumidor no reconoce ni elimina de forma reiterada podría aumentar los costos y suponer una carga adicional para el hardware. En lugar de intentar procesar mensajes con errores hasta que caducan, es mejor moverlos a una cola de mensajes fallidos después de algunos intentos de procesamiento.

nota

Las colas estándar permiten un número elevado de mensajes en tránsito. Si la mayoría de los mensajes no se pueden consumir y no se envían a una cola de mensajes fallidos, la tasa de procesamiento de mensajes válidos se puede ralentizar. Por lo tanto, para mantener la eficacia de la cola, asegúrese de que su aplicación se ocupa correctamente del procesamiento de mensajes.

Colas FIFO

Las colas FIFO proporcionan un procesamiento único al consumir mensajes en secuencia de un grupo de mensajes. Así, aunque el consumidor puede seguir recuperando mensajes ordenados de otro grupo de mensajes, el primer grupo de mensajes sigue sin estar disponible hasta que el mensaje que bloquea la cola se procese correctamente o se traslade a una cola de mensajes fallidos.

nota

Las colas FIFO permiten que haya menos mensajes en tránsito. Así, para evitar que su cola FIFO se bloquee por un mensaje, asegúrese de que su aplicación se encarga correctamente del procesamiento de mensajes.

Cuando un mensaje pasa de una cola FIFO a una DLQ FIFO, el ID de desduplicación del mensaje original se reemplazará por el ID del mensaje original. Esto es para asegurarse de que la desduplicación de DLQ no impedirá el almacenamiento de dos mensajes independientes que casualmente comparten un ID de desduplicación.

¿Cuándo debo usar una cola de mensajes fallidos?

Utilice colas de mensajes fallidos con colas estándar. Siempre debe utilizar las colas de mensajes fallidos cuando sus aplicaciones no dependan de la ordenación. Las colas de mensajes fallidos pueden ayudarle a solucionar problemas de las operaciones incorrectas de transmisión de mensajes.

nota

Aunque utilice colas de mensajes fallidos, debe seguir monitorizando las colas y reintentar el envío de los mensajes que fallan por motivos transitorios.

Utilice las colas de mensajes fallidos para reducir el número de mensajes y para reducir la posibilidad de exponer su sistema a mensajes de píldoras venenosas (mensajes que se pueden recibir pero no se pueden procesar).

No utilice una cola de mensajes fallidos con colas estándar cuando desee poder seguir reintentando la transmisión de un mensaje de forma indefinida. Por ejemplo, no utilice una cola de mensajes fallidos si su programa debe esperar hasta que un proceso dependiente esté activo o disponible.

No utilice una cola de mensajes fallidos con una cola FIFO si no desea interrumpir el orden exacto de los mensajes o las operaciones. Por ejemplo, no utilice una cola de mensajes fallidos con instrucciones de una lista de decisiones de edición (EDL) para un programa de edición de vídeo, donde al cambiar el orden de las ediciones se cambia el contexto de las ediciones posteriores.

Traslado de mensajes de una cola de mensajes fallidos

Puede utilizar el redireccionamiento de cola de mensajes fallidos para administrar el ciclo de vida de los mensajes no consumidos. Después de haber investigado los atributos y metadatos relacionados disponibles para los mensajes no consumidos en una cola de mensajes fallidos estándar o FIFO, puede redirigir los mensajes de vuelta a las colas de origen. El redireccionamiento de cola de mensajes fallidos reduce la facturación de las llamadas a la API mediante el procesamiento por lotes de los mensajes mientras se trasladan.

La tarea de redireccionamiento utiliza las API SendMessageBatch, ReceiveMessage y DeleteMessageBatch de Amazon SQS en nombre del usuario para redireccionar los mensajes. Por lo tanto, todos los mensajes redirigidos se consideran mensajes nuevos con un nuevo messageid, enqueueTime y periodo de retención. Los precios de redireccionamiento de cola de mensajes fallidos utilizan el número de llamadas a la API invocadas y facturan en función de los precios de Amazon SQS.

De forma predeterminada, el redireccionamiento de cola de mensajes fallidos mueve los mensajes de una cola de mensajes fallidos a una cola de origen. No obstante, también puede configurar cualquier otra cola estándar como destino de redireccionamiento si las colas son del mismo tipo. Por ejemplo, si la cola de mensajes fallidos es una cola FIFO, la cola de destino de redireccionamiento también debe ser una cola FIFO. Además, puede configurar la velocidad de redireccionamiento para establecer a qué velocidad Amazon SQS mueve los mensajes. Para obtener instrucciones sobre la configuración de un redireccionamiento de cola de mensajes fallidos, consulte Configuración de un redireccionamiento de cola de mensajes fallidos.

nota

Amazon SQS no admite el filtrado y la modificación de mensajes mientras los redirecciona desde la cola de mensajes fallidos.

Una tarea de redireccionamiento de cola de mensajes fallidos puede ejecutarse un máximo de 36 horas. Amazon SQS admite un máximo de 100 tareas de redireccionamiento activas por cuenta.

Cuando los mensajes se redirigen de una cola de mensajes fallidos de FIFO, el ID de grupo de mensajes y el ID de deduplicación permanecen iguales y el mensaje recibe un nuevo ID de mensaje.

Las colas de mensajes fallidos de Amazon SQS redirigen los mensajes en el orden en que se reciben, empezando por el mensaje más antiguo. Sin embargo, la cola de destino ingiere los mensajes redirigidos, así como los mensajes nuevos de otros productores, según el orden en que los recibe. Por ejemplo, si un productor envía mensajes a una cola FIFO de origen cuando de forma simultánea recibe mensajes redirigidos de una cola de mensajes fallidos, los mensajes redirigidos se entrelazarán con los nuevos mensajes del productor.

Solución de problemas de las colas de mensajes fallidos

En algunos casos, es posible que las colas de mensajes fallidos de Amazon SQS no siempre se comporten como se espera. En esta sección se proporciona información general sobre los problemas comunes y se muestra cómo resolverlos.

La visualización de mensajes mediante la consola puede hacer que los mensajes se muevan a una cola de mensajes fallidos

Amazon SQS cuenta la visualización de un mensaje en la consola; para la política de redireccionamiento de la cola correspondiente. Por tanto, si ve un mensaje en la consola el número de veces especificado en la política de redireccionamiento de la cola correspondiente, el mensaje se enviará a la cola de mensajes fallidos de dicha cola.

Para configurar este comportamiento, puede elegir una de las siguientes opciones:

  • Aumentar la configuración Maximum Receives de la política de redireccionamiento de la cola correspondiente.

  • Evitar visualizar los mensajes de la cola correspondiente en la consola.

Los valores de NumberOfMessagesSent y NumberOfMessagesReceived para una cola de mensajes fallidos no coinciden

Si envía manualmente un mensaje a una cola de mensajes fallidos, la métrica NumberOfMessagesSent lo captura. Sin embargo, si se envía un mensaje a una cola de mensajes fallidos como consecuencia de un intento fallido de procesamiento, esta métrica no lo captura. Por tanto, es posible que los valores de NumberOfMessagesSent y NumberOfMessagesReceived sean diferentes.

Para obtener información sobre la creación y configuración de un redireccionamiento de cola de mensajes fallidos

Tenga en cuenta que el redireccionamiento de cola de mensajes fallidos requiere que establezca los permisos adecuados para que Amazon SQS reciba mensajes de la cola de mensajes fallidos y envíe mensajes a la cola de destino. En caso de permisos insuficientes, el redireccionamiento de cola de mensajes fallidos a la cola de origen no inicia el redireccionamiento de mensajes y se puede producir un error en la tarea. Puede ver el estado de su tarea de redireccionamiento de mensajes para solucionar los problemas e intentarlo de nuevo.