Sobes.tech
Middle — Middle+

Môžete vysvetliť hierarchiu správ s garantovaným doručením, pri ktorej bude správa doručená aspoň raz?

sobes.tech AI

Odpoveď od AI

Záruka doručenia aspoň raz (at-least-once delivery) znamená, že systém zabezpečuje doručenie správy príjemcovi najmenej raz, ale môže dôjsť k duplikátom.

Hierarchia správ s touto zárukou sa zvyčajne buduje na nasledujúcich úrovniach:

  1. Odoslanie správy — správa je umiestnená do fronty alebo brokeru správ.
  2. Potvrdenie prijatia — príjemca potvrdí prijatie správy (acknowledgment).
  3. Opätovné odoslanie — ak potvrdenie nepríde v stanovenom čase, správa sa odošle znova.

V Go, napríklad pri práci s brokermi ako Kafka alebo RabbitMQ, je možné takúto logiku implementovať:

  • Správa je publikovaná do fronty.
  • Príjemca spracováva správu a posiela potvrdenie.
  • Ak potvrdenie nepríde, broker správu znovu doručí.

Toto zabezpečuje, že správa bude doručená aspoň raz, ale môže byť doručená viackrát, ak sa stratia potvrdenia alebo spracovanie nie je dokončené.

Príklad v Go s RabbitMQ (zjednodušený):

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

for d := range msgs {
    // Spracovanie správy
    processMessage(d.Body)
    // Potvrdenie spracovania
    d.Ack(false)
}

Ak Ack nie je volané, správa bude znovu doručená.