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
SendMessageapó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
ChangeMessageVisibilitypara 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
SendMessageapó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.