Aparentemente existe desenvolvedores que encaram a confirmação de leitura como um paradoxo (Uma figura de pensamento, baseada na contradição).
A origem deste cenário é suposição erronea que o Rabbit não é capaz de garantir entrega de mensagens. Esta suposição leva a raciocínios ainda mais exóticos de utilização equivocadas de padrões para tentar resolver este paradoxo.
Aparentemente existe uma falta de entendimento de conceitos fundamentais para utilização filas e formas de garantias. A falta de entendimento dos motivadores dos padrões de Inbox e OutBox completam este cenário caótico.
Ambos os padrões(Inbox/OutBox) foram criados para resolver um problema de resiliência baseado no conceito de atomicidade. Os 2 padrões não são nem bons, nem ruins, entretanto o uso deles antes do conhecimento básico, antes de entender o problema de negócio e entender se o pattern entrega valor para o negócio, é overengeenering puro.
Vamos explorar 2 tipos de garantias (existem mais) em ambientes distribuídos para resolver este paradoxo:
➡ No máximo uma vez – Quando enviamos uma mensagem e o processamento falha, a mensagem será perdida e não será tratada. Isso pode acontecer tanto por erros transitórios quanto por erros não transitórios. Este tipo de garantia o ACK automático se encaixa.
Penso que se um dado que desejo trabalhar é descartável (Garanto a entrega mas não preciso garantir sua execução) não vejo motivo algum para gastar processamento e recursos para tratar este cenário utilizando filas.
➡ Pelo menos uma vez – Temos a certeza de que a mensagem será sempre entregue, porém a execução pode ou não falhar, gerando a incerteza de quantas vezes isso será tratado. Este tipo de garantia precisa vir acompanhado com o tratamento correto da idempotência para garantir a consistência dos dados em um possível reprocessamento.
Podemos conseguir melhorar a resiliência de falha criando novas filas de retentivas ou republicando mensagens do lado do produtor (por exemplo, com um padrão de caixa de saída – OutBox) ou remanipulando do lado do consumidor (por exemplo, com um padrão de caixa de entrada – Inbox).
Este tipo de garantia o ACK manual se encaixa, dando a oportunidade de o desenvolvedor escolher a melhor estratégia para um tratamento , com garantia de entregue e do processamento.
🔔 Quando passamos a debater os conceitos fundamentais das tecnologias e padrões envolvidos, tornamos nossas escolhas mais fácil! garantindo o entendimento correto de sua utilização evitando-se paradoxos que na realidade não existem.
Links de referências :
https://gago.io/blog/oragon-rabbitmq-relacao-ack-e-resiliencia/
https://event-driven.io/en/outbox_inbox_patterns_and_delivery_guarantees_explained/
Tenham um excelente dia! Eu sou Fernando Cerqueira e entrego estratégias digitais para os desafios do presente, com propostas de inovação para um futuro sustentável.






