Tecnologias/03 - Filas/03 - Amazon SQS2 min
Standard, FIFO e Deduplicação no SQS
Tipos de fila
| Aspecto | Standard | FIFO |
|---|---|---|
| Ordem | Melhor esforço; pode haver mensagens fora de ordem | Preservada dentro de cada grupo |
| Duplicidade | A entrega pode se repetir | Deduplica publicações dentro da janela definida |
| Paralelismo | Consumidores podem dividir mensagens independentes | Grupos diferentes permitem progresso independente |
| Nome | Sem exigência de sufixo FIFO | Termina em .fifo |
Standard oferece entrega pelo menos uma vez. O consumidor precisa aceitar reentregas e, quando necessário, tratar eventos fora de ordem. Referência: Standard.
Grupos no FIFO
MessageGroupId identifica um conjunto ordenado de mensagens. Usar o pedido como grupo
permite manter a sequência daquele pedido e processar outros pedidos em paralelo.
Grupo pedido-42: criado → pago → enviado
Grupo pedido-73: criado → cancelado
A ordenação é por grupo, sem ordem global entre os dois. Se um lote recebido contiver várias mensagens do mesmo grupo, a aplicação precisa respeitar a sequência ao executar seus efeitos. Concentrar tudo em um grupo reduz o paralelismo disponível. Referência: FIFO.
Deduplicação
MessageDeduplicationId permite identificar publicações repetidas dentro de uma janela
de 5 minutos. Com deduplicação por conteúdo habilitada, o serviço pode gerar o
identificador a partir do corpo; atributos da mensagem não participam desse cálculo.
Dois eventos distintos não devem receber o mesmo identificador nessa janela. Uma repetição depois da janela também não tem a mesma proteção. Referência: deduplicação FIFO.
Limite da garantia
Deduplicar publicações não torna atômicos o efeito no banco e a exclusão na fila. Se o consumidor gravar o resultado e cair antes de excluir a mensagem, ela poderá voltar após o timeout. Idempotência impede que essa repetição duplique o efeito. Veja 3. Visibility Timeout e Exclusão no SQS.
As cotas de throughput FIFO dependem do modo, dos lotes, das partições e da região; um valor único de mensagens por segundo não descreve todas as configurações. Referência: cotas.
Aprofundamento aplicado
Escolher a menor fronteira que precisa de ordem
Se a sequência importa por pedido, usar pedidoId como grupo permite paralelismo
entre pedidos. Usar um único grupo para todos serializa trabalho desnecessariamente.
Usar um grupo por mensagem elimina a sequência entre mensagens relacionadas.
Cenário: criado → pago → enviado de um pedido não deve aplicar enviado antes
de pago. A fila preserva a ordem do grupo na entrega conforme suas regras, mas um
handler que executa itens do mesmo grupo em paralelo pode inverter a conclusão.
Deduplicação e replay
A janela de deduplicação FIFO é finita. O registro de idempotência de negócio deve cobrir quanto tempo mensagens podem voltar por falha, redrive ou replay. A escolha da chave precisa distinguir uma nova transição de outra tentativa da mesma transição. Referência: deduplicação FIFO.
Exercício: crie dois pedidos com três eventos cada. Resultado esperado: processar os pedidos em paralelo e os eventos de cada pedido em sequência, incluindo uma falha no segundo evento de um dos grupos.
Relacionado: Idempotent Operations · 4. Retry, DLQ e Lambda com SQS.
Parte de Amazon SQS