Sobes.tech
Middle — Middle+

Můžete vysvětlit hierarchii zpráv s garantovaným doručením, při které bude zpráva doručena alespoň jednou?

sobes.tech AI

Odpověď od AI

Záruka doručení alespoň jednou (at-least-once delivery) znamená, že systém zajišťuje doručení zprávy příjemci alespoň jednou, ale může dojít k duplicitám.

Hierarchie zpráv s touto zárukou je obvykle postavena na následujících úrovních:

  1. Odeslání zprávy — zpráva je umístěna do fronty nebo brokeru zpráv.
  2. Potvrzení přijetí — příjemce potvrzuje přijetí zprávy (acknowledgment).
  3. Opětovné odeslání — pokud potvrzení není přijato v daném časovém limitu, zpráva je odeslána znovu.

V Go, například při práci s brokery jako Kafka nebo RabbitMQ, lze takovou logiku implementovat:

  • Zpráva je publikována do fronty.
  • Příjemce zpracovává zprávu a posílá potvrzení.
  • Pokud potvrzení nepřijde, broker zprávu znovu doručí.

Toto zajišťuje, že zpráva bude doručena alespoň jednou, ale může být doručena vícekrát, pokud se ztratí potvrzení nebo není dokončeno zpracování.

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

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

for d := range msgs {
    // Zpracování zprávy
    processMessage(d.Body)
    // Potvrzení zpracování
    d.Ack(false)
}

Pokud Ack není voláno, zpráva bude znovu doručena.