Middle — Middle+
Teslimat garantisi olan ve mesajın en az bir kez teslim edileceği mesaj hiyerarşisini açıklayabilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
En az bir kez teslim garantisi (at-least-once delivery), sistemin mesajı alıcıya en az bir kez teslim ettiğini sağlar, ancak çoğaltma olabilir.
Bu garanti ile mesajların hiyerarşisi genellikle aşağıdaki seviyelerde kurulur:
- Mesaj gönderimi — mesaj kuyruk veya mesaj brokerına yerleştirilir.
- Alındı onayı — alıcı mesajı aldığını onaylar (acknowledgment).
- Yeniden gönderim — onay alınmazsa, mesaj belirli bir zaman aşımında yeniden gönderilir.
Go'da, örneğin Kafka veya RabbitMQ gibi brokerlerle çalışırken, böyle bir mantık uygulanabilir:
- Mesaj kuyrukta yayınlanır.
- Alıcı mesajı işler ve onay gönderir.
- Onay alınmazsa, broker mesajı tekrar iletir.
Bu, mesajın en az bir kez teslim edilmesini sağlar, ancak onay kaybolursa veya işlem tamamlanmazsa birkaç kez teslim edilebilir.
Go'da RabbitMQ kullanarak (basitleştirilmiş):
ch, _ := conn.Channel()
msgs, _ := ch.Consume("queue", "", false, false, false, false, nil)
for d := range msgs {
// Mesajı işleme
processMessage(d.Body)
// İşlem onayı
d.Ack(false)
}
Ack çağrılmazsa, mesaj tekrar teslim edilir.