Sobes.tech
Middle — Middle+

Pode explicar a hierarquia de mensagens com garantia de entrega, na qual a mensagem será entregue pelo menos uma vez?

sobes.tech IA

Resposta da IA

A garantia de entrega pelo menos uma vez (at-least-once delivery) significa que o sistema garante a entrega da mensagem ao destinatário pelo menos uma vez, mas pode ocorrer duplicação.

A hierarquia de mensagens com essa garantia geralmente é construída nos seguintes níveis:

  1. Envio da mensagem — a mensagem é colocada em uma fila ou broker de mensagens.
  2. Confirmação de recebimento — o destinatário confirma o recebimento da mensagem (acknowledgment).
  3. Reenvio — se a confirmação não for recebida dentro do timeout definido, a mensagem é reenviada.

Em Go, por exemplo, ao trabalhar com brokers como Kafka ou RabbitMQ, essa lógica pode ser implementada:

  • A mensagem é publicada na fila.
  • O destinatário processa a mensagem e envia uma confirmação.
  • Se a confirmação não chegar, o broker reenviará a mensagem.

Isso garante que a mensagem será entregue pelo menos uma vez, mas pode ser entregue várias vezes se a confirmação for perdida ou o processamento não for concluído.

Exemplo em Go usando RabbitMQ (de forma simplificada):

ch, _ := conn.Channel()
msgs, _ := ch.Consume("queue", "", false, false, false, false, nil)

for d := range msgs {
    // Processamento da mensagem
    processMessage(d.Body)
    // Confirmação do processamento
    d.Ack(false)
}

Se Ack não for chamado, a mensagem será entregue novamente.