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.
Tiempo de espera de SQS visibilidad de Amazon
Cuando recibes un mensaje de una SQS cola de Amazon, permanece en la cola pero pasa a ser invisible temporalmente para otros consumidores. Esta invisibilidad se controla mediante el tiempo de espera de visibilidad, lo que garantiza que otros consumidores no puedan procesar el mismo mensaje mientras tú trabajas en él. Amazon SQS ofrece dos opciones para eliminar los mensajes después de procesarlos:
-
Eliminación manual: los mensajes se eliminan de forma explícita mediante
DeleteMessage
esta acción. -
Eliminación automática: en algunos casos AWS SDKs, los mensajes se eliminan automáticamente cuando se procesan correctamente, lo que simplifica los flujos de trabajo.
![Gráfico cronológico que muestra cómo se procesan las solicitudes durante el tiempo de espera de visibilidad](images/sqs-visibility-timeout-diagram.png)
Casos de uso del tiempo de espera de visibilidad
Gestione las tareas de larga duración: utilice el tiempo de espera de visibilidad para gestionar las tareas que requieren tiempos de procesamiento prolongados. Establezca un tiempo de espera de visibilidad adecuado para los mensajes que requieren un tiempo de procesamiento prolongado. Esto garantiza que otros consumidores no capten el mismo mensaje mientras se está procesando, lo que evita la duplicación de trabajo y mantiene la eficiencia del sistema.
Implemente mecanismos de reintento: amplíe el tiempo de espera de visibilidad mediante programación para las tareas que no se completen dentro del tiempo de espera inicial. Si una tarea no se completa dentro del tiempo de espera de visibilidad inicial, puede ampliarlo mediante programación. Esto permite que el sistema vuelva a intentar procesar el mensaje sin que otros consumidores lo vean, lo que mejora la tolerancia a los errores y la fiabilidad. Combínelo con Dead-Letter Queues (DLQs) para gestionar los errores persistentes.
Coordine los sistemas distribuidos: utilice el tiempo de espera de SQS visibilidad para coordinar las tareas en los sistemas distribuidos. Establezca tiempos de espera de visibilidad que se ajusten a los tiempos de procesamiento esperados para los diferentes componentes. Esto ayuda a mantener la coherencia y evita las condiciones de carrera en arquitecturas distribuidas y complejas.
Optimice la utilización de los recursos: ajuste los tiempos de espera de SQS visibilidad para optimizar la utilización de los recursos en su aplicación. Al establecer los tiempos de espera adecuados, puede asegurarse de que los mensajes se procesen de manera eficiente sin consumir recursos innecesariamente. Esto conduce a un mejor rendimiento general del sistema y a una mayor rentabilidad.
Establecer y ajustar el tiempo de espera de visibilidad
El tiempo de espera de visibilidad comienza en cuanto recibes un mensaje. Durante este período, se espera que proceses y elimines el mensaje. Si no lo eliminas antes de que se agote el tiempo de espera, el mensaje volverá a estar visible en la cola y otro consumidor podrá recuperarlo. El tiempo de espera de visibilidad predeterminado de una cola es de 30 segundos, pero puedes ajustarlo para que coincida con el tiempo que necesita la aplicación para procesar y eliminar un mensaje. También puedes establecer un tiempo de espera de visibilidad específico para los mensajes individuales sin cambiar la configuración general de la cola. Utilice la ChangeMessageVisibility
acción para ampliar o acortar el tiempo de espera mediante programación, según sea necesario.
Mensajes y cuotas en vuelo
En AmazonSQS, los mensajes a bordo son mensajes que ha recibido un consumidor pero que aún no se han eliminado. En el caso de las colas estándar, hay un límite de aproximadamente 120 000 mensajes en vuelo, según el tráfico de las colas y la acumulación de mensajes. Si alcanzas este límite, Amazon SQS devuelve un OverLimit
error que indica que no se pueden recibir más mensajes hasta que se eliminen algunos mensajes durante el vuelo. En el FIFO caso de las colas, los límites dependen de los grupos de mensajes activos.
-
Cuando se utiliza un sondeo breve: si se alcanza este límite mientras se utiliza un sondeo corto, Amazon SQS devolverá un
OverLimit
error que indica que no se pueden recibir más mensajes hasta que se eliminen algunos mensajes durante el vuelo. -
Cuando se utiliza un sondeo prolongado: si se utiliza un sondeo prolongado, Amazon SQS no devuelve ningún error cuando se alcanza el límite de mensajes durante el vuelo. En su lugar, no devolverá ningún mensaje nuevo hasta que el número de mensajes en tránsito caiga por debajo del límite.
Para gestionar los mensajes durante el vuelo de forma eficaz:
-
Eliminación inmediata: elimine los mensajes (manual o automáticamente) después de procesarlos para reducir el número de mensajes durante el vuelo.
-
Monitoree con CloudWatch: configure alarmas para que el número de pasajeros en vuelo sea elevado y así evitar que se alcance el límite.
-
Distribuya la carga: si está procesando un gran volumen de mensajes, utilice colas o consumidores adicionales para equilibrar la carga y evitar cuellos de botella.
-
Solicita un aumento de cuota: envía una solicitud a AWS Support si se requieren límites más altos.
Comprenda el tiempo de espera de visibilidad en los estándares y FIFO en las colas
Tanto en las colas estándar como en las colas FIFO (primero en entrar, primero en salir), el tiempo de espera de visibilidad ayuda a evitar que varios consumidores procesen el mismo mensaje simultáneamente. Sin embargo, debido al modelo de at-least-once entrega de AmazonSQS, no hay ninguna garantía absoluta de que un mensaje no se entregue más de una vez durante el período de tiempo de espera de visibilidad.
-
Colas estándar: el tiempo de espera de visibilidad en las colas estándar impide que varios consumidores procesen el mismo mensaje al mismo tiempo. Sin embargo, debido al modelo de at-least-once entrega, Amazon SQS no garantiza que un mensaje no se entregue más de una vez dentro del período de tiempo de espera de visibilidad.
-
FIFOcolas: en el caso de FIFO las colas, los mensajes con el mismo ID de grupo de mensajes se procesan siguiendo una secuencia estricta. Cuando un mensaje con un identificador de grupo de mensajes está en movimiento, los mensajes subsiguientes de ese grupo no estarán disponibles hasta que se elimine el mensaje en movimiento o se agote el tiempo de espera de visibilidad. Sin embargo, esto no «bloquea» el grupo indefinidamente: cada mensaje se procesa en secuencia y los consumidores solo podrán acceder al siguiente mensaje de ese grupo cuando se elimine o vuelva a ser visible. Este enfoque garantiza un procesamiento ordenado dentro del grupo sin impedir innecesariamente que el grupo entregue los mensajes.
Manejar los fallos
Si no procesa ni elimina un mensaje antes de que caduque el tiempo de espera de visibilidad (debido a errores de la aplicación, bloqueos o problemas de conectividad), el mensaje vuelve a estar visible en la cola. Luego, el mismo consumidor o uno diferente pueden recuperarlo para otro intento de procesamiento. Esto garantiza que los mensajes no se pierdan aunque se produzca un error en el procesamiento inicial. Sin embargo, si se establece un tiempo de espera de visibilidad demasiado alto, se puede retrasar la reaparición de los mensajes no procesados, lo que podría ralentizar los reintentos. Es fundamental establecer un tiempo de espera de visibilidad adecuado en función del tiempo de procesamiento previsto para gestionar los mensajes a tiempo.
Cambiar y finalizar el tiempo de espera de visibilidad
Puede cambiar o finalizar el tiempo de espera de visibilidad mediante la siguiente ChangeMessageVisibility
acción:
-
Cambiar el tiempo de espera: ajuste el tiempo de espera de visibilidad de forma dinámica utilizando.
ChangeMessageVisibility
Esto le permite ampliar o reducir los tiempos de espera para adaptarlos a las necesidades de procesamiento. -
Finalización del tiempo de espera: si decide no procesar un mensaje recibido, finalice su tiempo de espera de visibilidad configurándolo en 0 segundos
VisibilityTimeout
a lo largo de la acción.ChangeMessageVisibility
Esto hace que el mensaje esté inmediatamente disponible para que otros consumidores lo procesen.
Prácticas recomendadas
Utiliza las siguientes prácticas recomendadas para gestionar los tiempos de espera de visibilidad en AmazonSQS, incluida la configuración, el ajuste y la ampliación de los tiempos de espera, así como la gestión de los mensajes no procesados mediante colas de cartas muertas (). DLQs
-
Configurar y ajustar el tiempo de espera. Comience configurando el tiempo de espera de visibilidad para que coincida con el tiempo máximo que normalmente necesita la aplicación para procesar y eliminar un mensaje. Si no estás seguro del tiempo exacto de procesamiento, comienza con un tiempo de espera más corto (por ejemplo, 2 minutos) y amplíalo según sea necesario. Implemente un mecanismo de aceleración para extender periódicamente el tiempo de espera de visibilidad y garantizar que el mensaje permanezca invisible hasta que se complete el procesamiento. Esto minimiza las demoras en el reprocesamiento de los mensajes no gestionados y evita una visibilidad prematura.
-
Ampliar el tiempo de espera y gestionar el límite de 12 horas. Si el tiempo de procesamiento varía o puede superar el tiempo de espera establecido inicialmente, utilice la
ChangeMessageVisibility
acción para extender el tiempo de espera de visibilidad mientras procesa el mensaje. Tenga en cuenta que el tiempo de espera de visibilidad tiene un límite máximo de 12 horas a partir de la recepción del mensaje por primera vez. Ampliar el tiempo de espera no restablece este límite de 12 horas. Si su procesamiento requiere más tiempo que este límite, considere la posibilidad de utilizar AWS Step Functions o dividir la tarea en pasos más pequeños. -
Manejo de mensajes sin procesar. Para administrar los mensajes que fallan en varios intentos de procesamiento, configure una cola de mensajes sin procesar (). DLQ Esto garantiza que los mensajes que no se puedan procesar tras varios reintentos se capturen por separado para su posterior análisis o tratamiento, lo que evita que circulen repetidamente en la cola principal.