Cenários de recuperação de interrupção no Amazon SQS - Amazon Simple Queue Service

Cenários de recuperação de interrupção no Amazon SQS

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 SendMessage 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 ChangeMessageVisibility 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) 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.