

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.

# Desduplicación y agrupación de mensajes de Amazon SQS
<a name="best-practices-message-deduplication"></a>

En este tema se describen las prácticas recomendadas para garantizar un procesamiento coherente de los mensajes en Amazon SQS. En él, se explica cómo utilizar:
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html#API_SendMessage_RequestSyntax](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html#API_SendMessage_RequestSyntax) para evitar mensajes duplicados en las colas FIFO.
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) para administrar el orden de los mensajes dentro de grupos de mensajes distintos.

****Temas****
+ [Cómo evitar el procesamiento incoherente de los mensajes en Amazon SQS](avoiding-inconsistent-message-processing.md)
+ [Uso del ID de desduplicación de mensajes](using-messagededuplicationid-property.md)
+ [Uso del ID de grupo de mensajes](using-messagegroupid-property.md)
+ [Uso del ID de intento de solicitud de recepción](using-receiverequestattemptid-request-parameter.md)

# Cómo evitar el procesamiento incoherente de los mensajes en Amazon SQS
<a name="avoiding-inconsistent-message-processing"></a>

Debido a que Amazon SQS es un sistema distribuido, es posible que un consumidor no reciba un mensaje aunque Amazon SQS lo marque como entregado al regresar correctamente de una llamada de método de API [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html). En este caso, Amazon SQS registra el mensaje como entregado al menos una vez, aunque el consumidor no lo haya recibido. Dado que no se realizan intentos adicionales de entregar mensajes en estas condiciones, no recomendamos establecer el número máximo de recepciones en 1 para una [cola de mensajes fallidos](sqs-dead-letter-queues.md).

# Uso del ID de desduplicación de mensajes en Amazon SQS
<a name="using-messagededuplicationid-property"></a>

[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) es un token que se utiliza únicamente en las colas FIFO de Amazon SQS para evitar la entrega de mensajes duplicados. Garantiza que, en un intervalo de desduplicación de 5 minutos, solo se procese y entregue una instancia de un mensaje con el mismo ID de desduplicación.

Si Amazon SQS ya ha aceptado un mensaje con un ID de desduplicación específico, se confirmará cualquier mensaje posterior con el mismo ID, pero no se entregará a los consumidores.

**nota**  
Amazon SQS sigue realizando un seguimiento del ID de desduplicación incluso después de que el mensaje se haya recibido y eliminado.

**Topics**
+ [Cuándo proporcionar un ID de desduplicación de mensajes en Amazon SQS](providing-message-deduplication-id.md)
+ [Habilitación de la desduplicación para un sistema de un solo productor y un solo consumidor en Amazon SQS](single-producer-single-consumer.md)
+ [Escenarios de recuperación de interrupciones en Amazon SQS](designing-for-outage-recovery-scenarios.md)
+ [Configuración de tiempos de espera de visibilidad en Amazon SQS](working-with-visibility-timeouts.md)

# Cuándo proporcionar un ID de desduplicación de mensajes en Amazon SQS
<a name="providing-message-deduplication-id"></a>

Un productor debe especificar un ID de desduplicación de mensajes en los siguientes escenarios:
+ Al enviar cuerpos de mensajes idénticos que deben tratarse como únicos.
+ Al enviar mensajes con el mismo contenido pero con atributos de mensaje diferentes, lo que garantiza que cada mensaje se procese por separado.
+ Al enviar mensajes con contenido diferente (por ejemplo, un contador de reintentos incluido en el cuerpo del mensaje) pero que requieren que Amazon SQS los reconozca como duplicados.

# Habilitación de la desduplicación para un sistema de un solo productor y un solo consumidor en Amazon SQS
<a name="single-producer-single-consumer"></a>

Si tiene un único productor y un único consumidor y los mensajes son exclusivos porque incluyen un ID de mensaje específico de la aplicación en el cuerpo, siga estas prácticas recomendadas:
+ Habilite la desduplicación basada en el contenido para la cola (cada uno de sus mensajes tiene un cuerpo único). El productor puede omitir el ID de desduplicación de mensajes.
+ Cuando la desduplicación basada en contenido está habilitada para una cola FIFO de Amazon SQS y se envía un mensaje con un ID de desduplicación, el ID de desduplicación [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) invalida el ID de desduplicación basado en contenido generado.
+ Aunque no es necesario que el consumidor proporcione un ID de intento de solicitud de recepción para cada solicitud, es recomendable hacerlo porque permite que las secuencias de reintento tras un error se ejecuten con mayor rapidez.
+ Puede reintentar las solicitudes de envío o recepción, ya que no interfieren con la ordenación de los mensajes en las colas FIFO.

# Escenarios de recuperación de interrupciones en Amazon SQS
<a name="designing-for-outage-recovery-scenarios"></a>

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 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) 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 [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html) 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)](sqs-dead-letter-queues.md) 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](sqs-dead-letter-queues.md).

# Configuración de tiempos de espera de visibilidad en Amazon SQS
<a name="working-with-visibility-timeouts"></a>

Para garantizar un procesamiento fiable de los mensajes, establece el tiempo de espera de visibilidad para que sea superior al tiempo de espera de lectura del AWS SDK. Esto se aplica cuando se utiliza la API [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) tanto con sondeos cortos como con sondeos largos. Un tiempo de espera de visibilidad más largo evita que los mensajes estén disponibles para los demás consumidores antes de que se complete la solicitud original, lo que reduce el riesgo de que se duplique el procesamiento.

# Uso del ID de grupo de mensajes con las colas FIFO de Amazon SQS
<a name="using-messagegroupid-property"></a>

En las colas FIFO (primero en entrar, primero en salir), [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) es un atributo que organiza los mensajes en grupos distintos. Los mensajes de un mismo grupo siempre se procesan de uno en uno, siguiendo un orden estricto, lo que garantiza que no se procesen dos mensajes del mismo grupo simultáneamente. En las colas estándar, el uso de `MessageGroupId` permite crear [colas justas](sqs-fair-queues.md). Si se requiere un orden estricto, utilice una cola FIFO. 

**Topics**
+ [Intercalación de varios grupos de mensajes ordenados en Amazon SQS](interleaving-multiple-ordered-message-groups.md)
+ [Prevención del procesamiento duplicado en un sistema de varios productores y consumidores en Amazon SQS](avoding-processing-duplicates-in-multiple-producer-consumer-system.md)
+ [Elusión del volumen de tareas pendientes de mensajes con el mismo ID de grupo de mensajes en Amazon SQS](avoid-backlog-with-the-same-message-group-id.md)
+ [Cómo evitar reutilizar el mismo ID de grupo de mensajes con colas virtuales en Amazon SQS](avoiding-reusing-message-group-id-with-virtual-queues.md)

# Intercalación de varios grupos de mensajes ordenados en Amazon SQS
<a name="interleaving-multiple-ordered-message-groups"></a>

Para intercalar varios grupos de mensajes ordenados dentro de una única cola FIFO, asigne un [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) a cada grupo (por ejemplo, datos de sesiones para diferentes usuarios). Esto permite que varios consumidores lean de la cola simultáneamente, al tiempo que se garantiza que los mensajes del mismo grupo se procesen en orden.

Cuando se está procesando un mensaje con un `MessageGroupId` específico y este es invisible, ningún otro consumidor puede procesar mensajes de ese mismo grupo hasta que se agote el tiempo de espera de visibilidad o se elimine el mensaje.

# Prevención del procesamiento duplicado en un sistema de varios productores y consumidores en Amazon SQS
<a name="avoding-processing-duplicates-in-multiple-producer-consumer-system"></a>

En un sistema de alto rendimiento y baja latencia en el que el orden de los mensajes no es una prioridad, los productores pueden asignar un [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) único a cada mensaje. Esto garantiza que las colas FIFO de Amazon SQS eliminen los duplicados, incluso en una configuración con varios productores y varios consumidores. Si bien este enfoque evita la duplicación de mensajes, no garantiza el orden de los mismos, ya que cada mensaje se trata como un grupo independiente.

En cualquier sistema con varios productores y consumidores, siempre existe el riesgo de que se produzcan duplicados en la entrega. Si un consumidor no procesa un mensaje antes de que expire el tiempo de espera de visibilidad, Amazon SQS vuelve a hacer que el mensaje esté disponible, lo que posiblemente permita que otro consumidor lo recoja. Para mitigar esta situación, asegúrese de configurar correctamente la confirmación de mensajes y el tiempo de espera de visibilidad en función del tiempo de procesamiento.

# Elusión del volumen de tareas pendientes de mensajes con el mismo ID de grupo de mensajes en Amazon SQS
<a name="avoid-backlog-with-the-same-message-group-id"></a>

Las colas FIFO admiten un máximo de 120 000 mensajes en tránsito (mensajes recibidos por un consumidor, pero que aún no se han eliminado). Si se alcanza este límite, Amazon SQS no devuelve ningún error, pero el procesamiento puede verse afectado. Puede solicitar un aumento por encima de este límite poniéndose en contacto con [AWS Support](https://docs.aws.amazon.com/awssupport/latest/user/create-service-quota-increase.html).

Las colas FIFO escanean los primeros 120 000 mensajes para determinar los grupos de mensajes disponibles. Si se acumula un gran volumen de tareas pendientes en un solo grupo de mensajes, los mensajes de los demás grupos enviados posteriormente permanecerán bloqueados hasta que se procesen las tareas pendientes.

**nota**  
Puede haber tareas pendientes de mensajes cuando un consumidor no logra procesar un mensaje repetidamente. Esto puede deberse a problemas con el contenido de los mensajes o a errores por parte del consumidor. Para evitar retrasos en el procesamiento de los mensajes, configure una [cola de mensajes fallidos](sqs-dead-letter-queues.md) para trasladar los mensajes no procesados después de varios intentos fallidos. De este modo, se garantiza que los demás mensajes del mismo grupo puedan procesarse, lo que evita los cuellos de botella en el sistema.

# Cómo evitar reutilizar el mismo ID de grupo de mensajes con colas virtuales en Amazon SQS
<a name="avoiding-reusing-message-group-id-with-virtual-queues"></a>

Cuando utilice colas virtuales con una cola de host compartida, evite reutilizar el mismo [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) en distintas colas virtuales. Si varias colas virtuales comparten la misma cola de host y contienen mensajes con el mismo `MessageGroupId`, esos mensajes pueden bloquearse entre sí, lo que impide un procesamiento eficiente. Para garantizar un procesamiento fluido de los mensajes, asigne valores `MessageGroupId` únicos a los mensajes de las diferentes colas virtuales.

# Uso del ID de intento de solicitud de recepción de Amazon SQS
<a name="using-receiverequestattemptid-request-parameter"></a>

El ID de intento de solicitud de recepción es un token único que se utiliza para desduplicar las llamadas a [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) en Amazon SQS. Durante una interrupción de la red o un problema de conectividad entre la aplicación y Amazon SQS, se recomienda lo siguiente:
+ Proporcione un ID de intento de solicitud de recepción al realizar una llamada a `ReceiveMessage`.
+ Vuelva a intentarlo con el mismo ID de intento de solicitud de recepción si la operación falla.