

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Desduplicação e agrupamento de mensagens do Amazon SQS
<a name="best-practices-message-deduplication"></a>

Este tópico fornece as práticas recomendadas para garantir o processamento consistente de mensagens no Amazon SQS. Aqui, você encontrará explicações para como usar:
+ [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 mensagens duplicadas nas filas FIFO.
+ [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) para gerenciar a ordenação de mensagens em grupos de mensagens distintos.

****Tópicos****
+ [Evitar o processamento inconsistente de mensagens no Amazon SQS](avoiding-inconsistent-message-processing.md)
+ [Uso do ID de eliminação de duplicação de mensagens](using-messagededuplicationid-property.md)
+ [Uso do ID do grupo de mensagens](using-messagegroupid-property.md)
+ [Uso do ID de tentativa de solicitação de recebimento](using-receiverequestattemptid-request-parameter.md)

# Evitar o processamento inconsistente de mensagens no Amazon SQS
<a name="avoiding-inconsistent-message-processing"></a>

Como o Amazon SQS é um sistema distribuído, é possível que um consumidor não receba uma mensagem mesmo quando o Amazon SQS a marcar como entregue ao retornar com êxito de uma chamada de método da API [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html). Nesse caso, o Amazon SQS registra a mensagem como entregue pelo menos uma vez, embora o consumidor nunca a tenha recebido. Como nenhuma tentativa adicional de entregar mensagens é feita sob essas condições, não recomendamos definir o número máximo de recebimentos como 1 para uma [fila de mensagens mortas](sqs-dead-letter-queues.md).

# Usar o ID de desduplicação de mensagens do 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) é um token usado apenas em filas FIFO do Amazon SQS para evitar a entrega duplicada de mensagens. Ele garante que, dentro de um intervalo de desduplicação de cinco minutos, somente uma instância de uma mensagem com o mesmo ID de desduplicação seja processada e entregue.

Se o Amazon SQS já aceitou uma mensagem com um ID específico de desduplicação, todas as mensagens subsequentes com o mesmo ID serão reconhecidas, mas não serão entregues aos consumidores.

**nota**  
O Amazon SQS continua acompanhando o ID de desduplicação da mensagem mesmo depois que a mensagem é recebida e excluída.

**Topics**
+ [Quando fornecer o ID de desduplicação de mensagens no Amazon SQS](providing-message-deduplication-id.md)
+ [Habilitar a desduplicação para um sistema de produtor/consumidor único no Amazon SQS](single-producer-single-consumer.md)
+ [Cenários de recuperação de interrupção no Amazon SQS](designing-for-outage-recovery-scenarios.md)
+ [Como configurar tempo limite de visibilidade no Amazon SQS](working-with-visibility-timeouts.md)

# Quando fornecer o ID de desduplicação de mensagens no Amazon SQS
<a name="providing-message-deduplication-id"></a>

O produtor deve especificar um ID de desduplicação de mensagens nos seguintes cenários:
+ Ao enviar corpos de mensagens idênticos que devem ser tratados como exclusivos.
+ Ao enviar mensagens com o mesmo conteúdo, mas com atributos de mensagem diferentes, garantindo que cada mensagem seja processada separadamente.
+ Ao enviar mensagens com conteúdo diferente (por exemplo, um contador de repetições no corpo da mensagem), mas solicitando que o Amazon SQS as reconheça como duplicações.

# Habilitar a desduplicação para um sistema de produtor/consumidor único no Amazon SQS
<a name="single-producer-single-consumer"></a>

Se você tiver um único produtor e um único consumidor, e as mensagens forem exclusivas porque incluem um ID de mensagem específico da aplicação incluído no corpo, siga as práticas recomendadas a seguir:
+ Ative a eliminação de duplicação baseada em conteúdo para a fila (cada uma de suas mensagens tem um único corpo). O produtor pode omitir o ID de eliminação de duplicação de mensagem.
+ Quando a desduplicação baseada em conteúdo é habilitada para uma fila FIFO do Amazon SQS e uma mensagem é enviada com um ID de desduplicação, o ID de desduplicação [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) substitui o ID de desduplicação baseado no conteúdo gerado.
+ Embora o consumidor não seja obrigado a fornecer um ID de tentativa de solicitação de recebimento, isso é uma prática recomendada porque permite que sequências de tentativa de recuperação de falhas sejam executadas mais rapidamente.
+ Você pode tentar enviar ou receber solicitações novamente, porque elas não interferem na ordenação de mensagens em filas FIFO.

# Cenários de recuperação de interrupção no Amazon SQS
<a name="designing-for-outage-recovery-scenarios"></a>

O processo de eliminação de duplicação em filas FIFO é depende do tempo. Ao projetar sua aplicação, garanta que o produtor e o consumidor possam se recuperar de interrupções de cliente ou da rede sem introduzir duplicações ou falhas de processamento.

Considerações sobre o produtor
+ O Amazon SQS impõe uma janela de desduplicação de cinco minutos.
+ Se um produtor tentar novamente uma solicitação [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) após cinco minutos, o Amazon SQS a tratará como uma nova mensagem, potencialmente criando duplicatas.

Considerações sobre o consumidor
+ Se o consumidor não processar uma mensagem antes que o tempo limite de visibilidade expire, outro consumidor poderá recebê-la e processá-la, resultando em um processamento duplicado.
+ Ajuste o tempo limite de visibilidade com base no tempo de processamento da sua aplicação.
+ Use a API [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html) para estender o tempo limite enquanto uma mensagem ainda está sendo processada.
+ Se uma mensagem falhar repetidamente no processamento, encaminhe-a para uma [fila de mensagens não entregues (DLQ)](sqs-dead-letter-queues.md) em vez de permitir que ela seja reprocessada indefinidamente.
+ O produtor deve estar ciente do intervalo de eliminação de duplicação da fila. O Amazon SQS tem um intervalo de eliminação de duplicação de cinco minutos. Repetir solicitações `SendMessage` após a expiração do intervalo da eliminação de duplicação pode introduzir mensagens duplicadas na fila. Por exemplo, um dispositivo móvel em um carro envia mensagens cuja ordem é importante. Se o carro perder a conectividade celular por um período antes de receber uma confirmação, tentar novamente a solicitação depois de recuperada a conectividade celular pode criar uma duplicação.
+ O consumidor deve ter um tempo limite de visibilidade que minimize o risco de não conseguir processar as mensagens antes que o tempo limite de visibilidade expire. Você pode estender o tempo limite de visibilidade enquanto as mensagens estão sendo processadas chamando a ação `ChangeMessageVisibility`. No entanto, se o tempo limite de visibilidade expirar, outro consumidor poderá começar imediatamente a processar as mensagens, fazendo com que uma mensagem seja processada várias vezes. Para evitar essa situação, configure uma [dead letter queue](sqs-dead-letter-queues.md).

# Como configurar tempo limite de visibilidade no Amazon SQS
<a name="working-with-visibility-timeouts"></a>

Para garantir um processamento confiável de mensagens, defina o tempo limite de visibilidade para ser maior que o tempo limite de leitura do AWS SDK. Isso se aplica ao usar a ação de API [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) com sondagem curta e sondagem longa. Um tempo limite de visibilidade maior impede que as mensagens sejam disponibilizadas para outros consumidores antes que a solicitação original seja concluída, reduzindo o risco de processamento duplicado.

# Usar o ID do grupo de mensagens com filas FIFO do Amazon SQS
<a name="using-messagegroupid-property"></a>

Em filas FIFO (First-In First-Out — primeira a entrar, primeira a sair), [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) é um atributo que organiza mensagens em grupos distintos. As mensagens dentro do mesmo grupo são sempre processadas uma por vez, em ordem estrita, garantindo que duas mensagens do mesmo grupo não sejam processadas simultaneamente. Em filas padrão, o uso de `MessageGroupId` ativa [filas justas](sqs-fair-queues.md). Se for necessária uma ordenação estrita, use uma fila FIFO. 

**Topics**
+ [Intercalar vários grupos de mensagens ordenadas no Amazon SQS](interleaving-multiple-ordered-message-groups.md)
+ [Como evitar o processamento de duplicatas em um sistema de vários produtores/consumidores no Amazon SQS](avoding-processing-duplicates-in-multiple-producer-consumer-system.md)
+ [Como evitar um grande acúmulo de mensagens com o mesmo ID de grupo de mensagens no Amazon SQS](avoid-backlog-with-the-same-message-group-id.md)
+ [Evitar reutilizar o mesmo ID de grupo de mensagens com filas virtuais no Amazon SQS](avoiding-reusing-message-group-id-with-virtual-queues.md)

# Intercalar vários grupos de mensagens ordenadas no Amazon SQS
<a name="interleaving-multiple-ordered-message-groups"></a>

Para intercalar vários grupos de mensagens ordenadas em uma única fila FIFO, atribua um [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) para cada grupo (por exemplo, dados de sessão de diferentes usuários). Isso permite que vários consumidores leiam da fila simultaneamente, ao mesmo tempo em que garante que as mensagens dentro do mesmo grupo sejam processadas em ordem.

Quando uma mensagem com um `MessageGroupId` específico estiver sendo processada e ficar invisível, nenhum outro consumidor poderá processar mensagens desse mesmo grupo até que o tempo limite de visibilidade expire ou a mensagem seja excluída.

# Como evitar o processamento de duplicatas em um sistema de vários produtores/consumidores no Amazon SQS
<a name="avoding-processing-duplicates-in-multiple-producer-consumer-system"></a>

Em um sistema de alto throughput e baixa latência em que a ordenação das mensagens não é uma prioridade, os produtores podem atribuir um [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) exclusivo para cada mensagem. Isso garante que as filas FIFO do Amazon SQS eliminem duplicatas, mesmo em uma configuração de vários produtores/vários consumidores. Embora essa abordagem evite mensagens duplicadas, ela não garante a ordem das mensagens, pois cada mensagem é tratada como seu próprio grupo independente.

Em qualquer sistema com vários produtores e consumidores, sempre existe o risco de entrega duplicada. Se um consumidor não processar uma mensagem antes que o tempo limite de visibilidade expire, o Amazon SQS disponibilizará a mensagem novamente, potencialmente permitindo que outro consumidor a pegue. Para mitigar isso, garanta configurações adequadas de reconhecimento de mensagens e tempo limite de visibilidade com base no tempo de processamento.

# Como evitar um grande acúmulo de mensagens com o mesmo ID de grupo de mensagens no Amazon SQS
<a name="avoid-backlog-with-the-same-message-group-id"></a>

As filas FIFO oferecem suporte para um máximo de 120.000 mensagens em trânsito (mensagens recebidas por um consumidor, mas ainda não excluídas). Se esse limite for atingido, o Amazon SQS não retornará um erro, mas o processamento poderá ser afetado. Você pode solicitar um aumento desse limite entrando em contato com o [AWS Support](https://docs.aws.amazon.com/awssupport/latest/user/create-service-quota-increase.html).

Filas FIFO examinam as primeiras 120.000 mensagens para determinar os grupos de mensagens disponíveis. Se houver grande acúmulo em um único grupo de mensagens, as mensagens de outros grupos enviadas posteriormente permanecerão bloqueadas até que o acúmulo seja processado.

**nota**  
Um acúmulo de mensagens pode ocorrer quando um consumidor não tem sucesso, repetidamente, no processamento de uma mensagem. Isso pode ser devido a problemas de conteúdo da mensagem ou falhas do lado do consumidor. Para evitar atrasos no processamento de mensagens, configure uma [fila de mensagens não entregues](sqs-dead-letter-queues.md) para mover mensagens não processadas após várias tentativas malsucedidas. Isso garante que outras mensagens no mesmo grupo possam ser processadas, evitando gargalos no sistema.

# Evitar reutilizar o mesmo ID de grupo de mensagens com filas virtuais no Amazon SQS
<a name="avoiding-reusing-message-group-id-with-virtual-queues"></a>

Ao usar filas virtuais com uma fila de host compartilhado, evite reutilizar o mesmo [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) em diferentes filas virtuais. Se várias filas virtuais compartilharem a mesma fila do host e contiverem mensagens com o mesmo `MessageGroupId`, essas mensagens poderão se bloquear, impedindo o processamento eficiente. Para garantir um processamento sem problemas, atribua valores `MessageGroupId` exclusivos para mensagens em diferentes filas virtuais.

# Usar o ID de tentativa de solicitação de recebimento do Amazon SQS
<a name="using-receiverequestattemptid-request-parameter"></a>

O ID de tentativa de solicitação de recebimento é um token exclusivo usado para desduplicar chamadas de [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html) no Amazon SQS. Durante uma interrupção na rede ou um problema de conectividade entre sua aplicação e o Amazon SQS, a prática recomendada é:
+ Forneça um ID de tentativa de solicitação de recebimento ao fazer uma chamada de `ReceiveMessage`.
+ Tente novamente usando o mesmo ID de tentativa de solicitação de recebimento se a operação falhar.