Sobes.tech
Middle — Middle+

El tudná magyarázni az üzenetek hierarchiáját szállítási garanciával, ahol az üzenet legalább egyszer biztosan kézbesítésre kerül?

sobes.tech MI

Válasz az MI-től

A legalább egyszeri kézbesítés (at-least-once delivery) garantálja, hogy a rendszer legalább egyszer biztosítja az üzenet kézbesítését a címzettnek, de duplikációk előfordulhatnak.

Az ilyen garanciával rendelkező üzenetrend általában a következő szinteken épül fel:

  1. Üzenet küldése — az üzenet egy sorba vagy üzenetbrokerbe kerül.
  2. Átvételi megerősítés — a címzett megerősíti az üzenet átvételét (acknowledgment).
  3. Újraküldés — ha a megerősítés nem érkezik meg a megadott időn belül, az üzenet újra küldésre kerül.

Go-ban, például Kafka vagy RabbitMQ brokerrel dolgozva, ezt a logikát meg lehet valósítani:

  • Az üzenet közzététele a sorban.
  • A címzett feldolgozza az üzenetet és megerősítést küld.
  • Ha a megerősítés nem érkezik meg, a broker újra kézbesíti az üzenetet.

Ez garantálja, hogy az üzenet legalább egyszer kézbesítésre kerül, de többször is kézbesítheti, ha a megerősítés elveszik vagy a feldolgozás nem fejeződik be.

Go példában RabbitMQ-val (egyszerűsített):

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

for d := range msgs {
    // Üzenet feldolgozása
    processMessage(d.Body)
    // Feldolgozás megerősítése
    d.Ack(false)
}

Ha az Ack nem hívódik meg, az üzenet újra kézbesítésre kerül.