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:
- Üzenet küldése — az üzenet egy sorba vagy üzenetbrokerbe kerül.
- Átvételi megerősítés — a címzett megerősíti az üzenet átvételét (acknowledgment).
- Ú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.