Middle — Middle+
Kunt u de bericht hiërarchie met bezorggarantie uitleggen, waarbij het bericht minimaal één keer wordt bezorgd?
sobes.tech AI
Antwoord van AI
De garantie dat een bericht minstens één keer wordt bezorgd (at-least-once delivery) betekent dat het systeem ervoor zorgt dat het bericht minimaal één keer bij de ontvanger aankomt, maar duplicatie kan voorkomen.
De hiërarchie van berichten met deze garantie wordt meestal opgebouwd op de volgende niveaus:
- Bericht verzenden — het bericht wordt in een wachtrij of berichtbroker geplaatst.
- Ontvangstbevestiging — de ontvanger bevestigt de ontvangst van het bericht (acknowledgment).
- Herzending — als de bevestiging niet binnen de gestelde timeout wordt ontvangen, wordt het bericht opnieuw verzonden.
In Go, bijvoorbeeld bij het werken met brokers zoals Kafka of RabbitMQ, kan deze logica worden geïmplementeerd:
- Het bericht wordt gepubliceerd in de wachtrij.
- De ontvanger verwerkt het bericht en stuurt een bevestiging.
- Als de bevestiging niet binnenkomt, levert de broker het bericht opnieuw af.
Dit garandeert dat het bericht minstens één keer wordt bezorgd, maar kan meerdere keren worden afgeleverd als de bevestiging verloren gaat of de verwerking niet is voltooid.
Voorbeeld in Go met RabbitMQ (vereenvoudigd):
ch, _ := conn.Channel()
msgs, _ := ch.Consume("queue", "", false, false, false, false, nil)
for d := range msgs {
// Verwerking van het bericht
processMessage(d.Body)
// Bevestiging van verwerking
d.Ack(false)
}
Als Ack niet wordt aangeroepen, wordt het bericht opnieuw afgeleverd.