Sobes.tech
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:

  1. Mesaj gönderimi — mesaj kuyruk veya mesaj brokerına yerleştirilir.
  2. Alındı onayı — alıcı mesajı aldığını onaylar (acknowledgment).
  3. 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.