devterview_$ iniciar simulação

Entrega 'pelo menos uma vez' e consumidores idempotentes

DifícilSêniorMensageria

Pergunta

Filas de mensagem normalmente garantem entrega 'at least once'. O que isso implica pro código do consumidor?

Resposta esperada

'At least once' significa que uma mensagem pode ser entregue mais de uma vez — por retry após falha de ack, por rebalanceamento de partição, por timeout de visibilidade. O consumidor NÃO pode assumir que processa cada mensagem exatamente uma vez. Implicação: o processamento tem que ser idempotente — reaplicar a mesma mensagem não deve mudar o resultado. Técnicas: chave de deduplicação (guardar ids de mensagens já processadas, com TTL, e ignorar repetição); operações naturalmente idempotentes (`set status = 'pago'` em vez de `saldo += valor`); ou um outbox/inbox transacional que amarra o processamento e o registro do id numa transação. 'Exactly once' de ponta a ponta é caro e frequentemente é, na prática, 'at least once + consumidor idempotente'.

Por que perguntam isso

Pergunta pleno/sênior. Conecta com Idempotency-Key das APIs. Sinal de experiência: 'exactly once é at least once + consumidor idempotente'.

#at-least-once#idempotencia#filas#dedupe
publicidade

Relacionadas