Tecnologias/03 - Filas/02 - RabbitMQ2 min
Confirmações, Retry e DLQ no RabbitMQ
Duas confirmações diferentes
| Mecanismo | Quem confirma | O que informa |
|---|---|---|
| Publisher confirm | Broker ao produtor | A publicação foi tratada pelo broker conforme as garantias aplicáveis |
| Consumer acknowledgement | Consumidor ao broker | A entrega pode ser considerada processada |
ack manual permite confirmar depois de concluir o trabalho. Se a conexão cair antes
da confirmação, uma entrega pendente pode ser reenviada. nack ou reject podem
solicitar reentrada na fila ou rejeição, conforme seus parâmetros.
Prefetch limita entregas simultaneamente pendentes de confirmação no escopo configurado. Um limite menor reduz trabalho acumulado por consumidor; um limite alto pode elevar uso de memória e quantidade de mensagens a reentregar após uma falha. Referência: confirmações.
Exemplo de duplicidade
1. O consumidor recebe o evento 781.
2. Grava o resultado no banco.
3. Cai antes de enviar ack.
4. O broker entrega 781 novamente.
O consumidor precisa reconhecer que o efeito já foi aplicado. Uma opção é registrar o identificador do evento na mesma transação que grava o resultado, com uma restrição de unicidade apropriada. O identificador precisa representar o evento lógico.
Retry e dead-letter
Retry é uma nova tentativa. Recolocar imediatamente na fila uma mensagem que sempre falha cria um ciclo de consumo sem progresso. Um mecanismo de tentativas precisa considerar espera, limite e motivo da falha.
DLX é o exchange para o qual mensagens são republicadas em condições de dead-letter, como rejeição sem requeue ou expiração, conforme a configuração. DLQ é uma fila ligada a esse fluxo. Criar uma DLQ não corrige nem reprocessa automaticamente a mensagem. A segurança da transferência depende do tipo de fila e da configuração. Referência: Dead Letter Exchanges.
Aprofundamento aplicado
Transferir para retry também tem uma janela de falha
Um consumidor pode republicar em uma fila de retry e confirmar a entrega original. Se confirmar antes de garantir a nova publicação, pode perder trabalho. Se a nova publicação confirma e o processo cai antes do ack original, pode haver duplicidade. A estratégia deve tolerar essa janela e usar as garantias do tipo de fila configurado.
DLX é um mecanismo de roteamento de mensagens rejeitadas ou expiradas; sua transferência não deve ser presumida livre de perdas em qualquer configuração. Quorum queues oferecem opções específicas que exigem configuração apropriada. Referência: segurança de dead-lettering.
Separar falha transitória de conteúdo inválido
Indisponibilidade de um serviço pode merecer espera crescente com variação aleatória. Um payload incompatível precisa de correção ou tratamento específico; requeue imediato pode consumir CPU e rede sem chance de sucesso.
Exercício: acompanhe um ID lógico pelo consumo original, retry e DLQ. Resultado esperado: contar tentativas e preservar causa, identidade e conteúdo; o redrive acontece após corrigir a causa e respeita a capacidade do destino.
Relacionado: Idempotent Operations · Back Pressure · 1. RabbitMQ.
Parte de RabbitMQ