As arquiteturas orientadas a eventos desacoplam produtores de consumidores, permitindo que os sistemas escalem e falhem independentemente. Mas a fiabilidade requer design cuidadoso.
Escolher a fila certa
A AWS oferece vários serviços de filas. O SQS é a escolha mais comum para processamento em background. Fornece entrega pelo menos uma vez, visibility timeouts configuráveis e dead-letter queues. O SNS é útil quando precisa de fan-out para múltiplos subscritores. O EventBridge é a escolha certa para barramentos de eventos com regras de roteamento complexas.
Consumidores idempotentes
Como o SQS entrega mensagens pelo menos uma vez, o seu consumidor deve lidar com mensagens duplicadas. Um consumidor idempotente verifica um armazenamento de desduplicação antes de processar. Um padrão simples é usar uma tabela de base de dados com uma restrição única no ID da mensagem:
- Verificar se o ID da mensagem existe na tabela de processados.
- Se sim, reconhecer e saltar.
- Se não, processar e inserir o ID da mensagem.
Retry e dead-letter
As mensagens que falham o processamento devem ser repetidas. Configure o visibility timeout da fila para permitir tempo suficiente para processamento. Após um número máximo de receções, mova a mensagem para uma dead-letter queue.
A partir da dead-letter queue, pode inspecionar mensagens falhadas, corrigir o problema e reenviá-las. Nunca perca uma mensagem devido a falhas transitórias.
Monitorização
Configure alarmes CloudWatch na profundidade da fila, idade da mensagem mais antiga e tamanho da dead-letter queue. Estas métricas dizem-lhe quando os consumidores estão atrasados ou quando as mensagens estão a falhar consistentemente.