Significa que duplicatas são normais, não excepcionais, então o seu consumidor precisa ser idempotente. Derive uma chave estável da mensagem, registre as chaves processadas na mesma transação do efeito, e trate uma repetição como um no op. Espere também entrega fora de ordem e reentrega após uma queda entre fazer o trabalho e confirmar. Exatamente uma vez de ponta a ponta não existe entre sistemas; o que você tem é pelo menos uma vez mais tratamento idempotente.
Por que os entrevistadores perguntam isso
Essa é a origem mais comum de cobranças duplicadas e e-mails duplicados em sistemas orientados a eventos. O entrevistador quer saber se você projeta consumidores de forma defensiva ou supõe que o broker vai te proteger. Mencionar a janela de confirmação, uma tabela de deduplicação gravada na mesma transação e uma dead letter queue mostra que você já operou um consumidor, e não apenas escreveu um.
Como estruturar sua resposta
- Diga com clareza que duplicatas vão acontecer e por quê.
- Dê o mecanismo de idempotência, incluindo onde o registro é gravado.
- Cubra ordenação e a janela de confirmação.
- Acrescente tratamento de falhas: retries com backoff e uma dead letter queue.
Exemplo de resposta
Significa que eu vou receber a mesma mensagem duas vezes, normalmente porque o consumidor fez o trabalho e morreu antes de confirmar, então o broker reentrega. Então o consumidor precisa ser seguro de rodar duas vezes com a mesma entrada. Na prática eu pego um id estável da mensagem e, quando gravo o efeito, gravo o id processado na mesma transação de banco, com uma constraint de unicidade. Se o insert conflitar, eu sei que já tratei aquilo e confirmo sem refazer o trabalho. A parte crítica é que o registro de deduplicação e o efeito comitam juntos; se eu gravar separado, existe uma janela em que posso duplicar. Eu também assumo que a ordem não é garantida, então os handlers são escritos para tolerar um update chegando antes do create, normalmente usando a entidade como chave e checando uma versão. Para falhas eu uso retry limitado com backoff exponencial e jitter, depois uma dead letter queue com alerta, porque tentar de novo uma mensagem envenenada para sempre e em silêncio é como uma fila entope durante a noite.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Onde exatamente você guardaria a chave de deduplicação, e por quanto tempo?
- Como você preserva a ordenação quando precisa dela?
- Qual é o seu processo para esvaziar uma dead letter queue?
Mais perguntas para Desenvolvedor Backend
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas