Tiempo de espera de visibilidad 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.

Tiempo de espera de visibilidad de Amazon SQS

Cuando un consumidor recibe y procesa un mensaje de una cola, el mensaje permanece en la cola. Amazon SQS no elimina automáticamente el mensaje. Dado que Amazon SQS es un sistema distribuido, no garantiza que el consumidor reciba realmente el mensaje (por ejemplo, debido a un problema de conectividad o a un problema en la aplicación del consumidor). Por tanto, el consumidor debe eliminar el mensaje de la cola después de recibirlo y procesarlo.

Gráfico cronológico que muestra cómo se procesan las solicitudes durante el tiempo de espera de visibilidad

Inmediatamente después de recibirse un mensaje, este permanece en la cola. Para evitar que otros consumidores vuelvan a procesar el mensaje, Amazon SQS establece un tiempo de espera de visibilidad, que es un periodo de tiempo durante el cual Amazon SQS impide que otros consumidores reciban y procesen el mensaje. El tiempo de espera de visibilidad predeterminado de un mensaje es de 30 segundos. El mínimo es de 0 segundos. El máximo es de 12 horas. Para obtener información sobre la configuración del tiempo de espera de visibilidad de una cola mediante la consola, consulte Configuración de los parámetros de cola mediante la consola Amazon SQS.

nota

En las colas estándar, el tiempo de espera de visibilidad no es una garantía de que un mensaje no se recibirá dos veces. Para obtener más información, consulte Entrega de Amazon SQS at-least-once.

Las colas FIFO permiten al productor o al consumidor efectuar múltiples reintentos:

  • Si el productor detecta una acción SendMessage con error, puede reintentar el envío tantas veces como sea necesario, mediante el mismo ID de desduplicación de mensajes. Si se supone que el productor recibe al menos un acuse de recibo antes de que caduque el intervalo de desduplicación, los múltiples reintentos no afectan al orden de los mensajes ni generan duplicados.

  • Si el consumidor detecta una acción ReceiveMessage con error, puede volver a intentarlo tantas veces como sea necesario, mediante el mismo ID de intento de solicitud de recepción. Si se supone que el consumidor recibe al menos un acuse de recibo antes de que caduque el tiempo de visibilidad, los múltiples reintentos no afectan al orden de los mensajes.

  • Cuando reciba un mensaje con un ID de grupo de mensajes, no se devolverán más mensajes para el mismo ID de grupo de mensajes a menos que elimine el mensaje o este se haga visible.

Mensajes en tránsito

Un mensaje de Amazon SQS tiene tres estados básicos:

  1. Un productor lo ha enviado a una lista de espera.

  2. Un consumidor lo ha recibido de la cola.

  3. Se ha eliminado de la cola.

Se considera que un mensaje está almacenado después de que un productor lo envíe a una cola, pero un consumidor aún no lo haya recibido de la cola (es decir, entre los estados 1 y 2). No hay una cuota en cuanto al número de mensajes almacenados. Se considera que un mensaje está en tránsito después de que un consumidor lo haya recibido de una cola, pero aún no se haya eliminado de ella (es decir, entre los estados 2 y 3). Hay una cuota en cuanto al número de mensajes en tránsito.

importante

Las cuotas que se aplican a los mensajes en tránsito no guardan relación con el número ilimitado de mensajes almacenados.

En la mayoría de las colas estándar (según el tráfico de colas y los mensajes atrasados), puede haber un máximo de aproximadamente 120 000 mensajes en tránsito (recibidos de una cola por un consumidor, pero que aún no se han eliminado de la cola). Si alcanza esta cuota mientras utiliza sondeos cortos, Amazon SQS devuelve el mensaje de error OverLimit. Si utiliza sondeos largos, Amazon SQS no devuelve ningún mensaje de error. Para evitar llegar a la cuota, conviene eliminar los mensajes de la cola una vez procesados. También puede aumentar el número de las colas que usa para procesar los mensajes. Para solicitar un aumento de la cuota, envíe una solicitud de soporte técnico.

En el caso de las colas FIFO, puede haber un máximo de 20 000 mensajes en tránsito (recibidos de una cola por un consumidor, pero aún no eliminados de la cola). Si alcanza esta cuota, Amazon SQS no devuelve ningún mensaje de error.

importante

Cuando se trabaja con colas FIFO, se producirá un error en las operaciones de DeleteMessage si la solicitud se recibe fuera del intervalo de tiempo de visibilidad. Si el tiempo de espera de visibilidad es de 0 segundos, el mensaje debe eliminarse en el mismo milisegundo en que se envió o se considerará abandonado. Esto puede provocar que Amazon SQS incluya mensajes duplicados en la misma respuesta a una operación de ReceiveMessage si el parámetro MaxNumberOfMessages es mayor que 1. Para obtener más información, consulte Cómo funciona la API FIFO de Amazon SQS.

Configuración del tiempo de espera de visibilidad

El tiempo de espera de visibilidad comienza cuando Amazon SQS devuelve un mensaje. Durante este tiempo, el consumidor procesa y elimina el mensaje. Sin embargo, si se produce un error en el consumidor, se elimina el mensaje y su sistema no llama a la DeleteMessage acción para dicho mensaje antes de que expire el tiempo de espera de visibilidad, el mensaje se hace visible para otros consumidores y se recibe nuevamente. Si un mensaje solo se debe recibir una vez, el consumidor debe eliminarlo dentro de la duración del tiempo de espera de visibilidad.

Cada cola de Amazon SQS posee un tiempo de espera de visibilidad predeterminado de 30 segundos. Puede cambiar esta configuración para toda la cola. Normalmente, debe definir el tiempo de espera de visibilidad como el tiempo máximo que tarda su aplicación en procesar y eliminar un mensaje de la cola. Cuando reciba mensajes, también puede establecer un tiempo de espera de visibilidad especial para los mensajes devueltos sin cambiar el tiempo de espera general de la cola. Para obtener más información, consulte las prácticas recomendadas en la sección Procesar los mensajes de manera oportuna en Amazon SQS.

Si no sabe cuánto tiempo tarda en procesarse un mensaje, cree un latido para su proceso consumidor: especifique el tiempo de espera de visibilidad inicial (por ejemplo, dos minutos) y, a continuación, mientras su consumidor siga trabajando en el mensaje, continúe ampliando el tiempo de espera de visibilidad en dos minutos cada minuto.

importante

El tiempo máximo de visibilidad es de 12 horas desde el momento en que Amazon SQS recibe la solicitud ReceiveMessage. La ampliación del tiempo de espera de visibilidad no restablece el máximo de 12 horas.

Además, es posible que no pueda establecer el tiempo de espera de un mensaje individual en 12 horas completas (por ejemplo, 43 200 segundos), ya que la solicitud ReceiveMessage inicia el temporizador. Por ejemplo, si recibe un mensaje e inmediatamente establece el máximo de 12 horas mediante el envío de una llamada ChangeMessageVisibility con VisibilityTimeout igual a 43 200 segundos, es probable que se produzca un error. No obstante, utilizar un valor de 43 195 segundos funcionará a menos que exista un retraso significativo entre la solicitud del mensaje a través de ReceiveMessage y la actualización del tiempo de espera de visibilidad. Si su consumidor necesita más de 12 horas, considere usar Step Functions.

Cambio del tiempo de espera de visibilidad de un mensaje

Cuando se recibe un mensaje de una cola y empieza a procesarse, el tiempo de espera de visibilidad de la cola puede ser insuficiente (por ejemplo, es posible que deba procesar y eliminar un mensaje). Puede especificar un nuevo valor de tiempo de espera mediante la acción ChangeMessageVisibility para reducir o ampliar la visibilidad de un mensaje.

Por ejemplo, si el tiempo de espera predeterminado de una cola es de 60 segundos, han transcurrido 15 segundos desde que recibió el mensaje y envía una llamada a ChangeMessageVisibility con VisibilityTimeout establecido en 10 segundos, los 10 segundos empiezan a contar a partir del momento en que se realiza la llamada a ChangeMessageVisibility. Por tanto, cualquier intento de cambiar el tiempo de espera de visibilidad o de eliminar el mensaje 10 segundos después de cambiar inicialmente el tiempo de espera de visibilidad (un total de 25 segundos) podría dar lugar a un error.

nota

El nuevo periodo de tiempo de espera entra en vigor desde el momento en que llama a la acción ChangeMessageVisibility. Además, el nuevo periodo de tiempo de espera se aplica únicamente a la recepción concreta del mensaje. ChangeMessageVisibility no afecta al tiempo de espera de recepciones posteriores del mensaje ni a colas posteriores.

Finalización del tiempo de espera de visibilidad de un mensaje

Cuando recibe un mensaje de una cola, puede que realmente no desee procesarlo y eliminarlo. Amazon SQS le permite terminar el tiempo de espera de visibilidad de un mensaje concreto. De este modo, el mensaje será visible de inmediato para otros componentes del sistema y estará disponible para su procesamiento.

Para terminar el tiempo de espera de visibilidad de un mensaje después de llamar a ReceiveMessage, llame a ChangeMessageVisibility con VisibilityTimeout establecido en 0 segundos.