Sobes.tech
Middle — Middle+

Çatdırılma zəmanəti ilə mesajların iyerarxiyasını izah edə bilərsinizmi, burada mesaj ən az bir dəfə çatdırılacaq?

sobes.tech Süni İntellekt

AI-dan cavab

Ən az bir dəfə çatdırılma zəmanəti (at-least-once delivery) sistemin mesajı ən az bir dəfə alıcıya çatdırdığını təmin edir, lakin təkrarlama baş verə bilər.

Belə zəmanətlə mesajların hierarxiyası adətən aşağıdakı səviyyələrdə qurulur:

  1. Mesajın göndərilməsi — mesaj növbəyə və ya mesaj brokerinə yerləşdirilir.
  2. Qəbul təsdiqi — alıcı mesajın qəbulunu təsdiqləyir (acknowledgment).
  3. Yenidən göndərmə — əgər təsdiq vaxtında alınmazsa, mesaj yenidən göndərilir.

Go-da, məsələn, Kafka və ya RabbitMQ kimi brokerlərlə işləyərkən, bu məntiqi həyata keçirmək olar:

  • Mesaj növbəyə yerləşdirilir.
  • Alıcı mesajı işləyir və təsdiq göndərir.
  • Əgər təsdiq alınmazsa, broker mesajı yenidən çatdırır.

Bu, mesajın ən az bir dəfə çatdırılmasını təmin edir, lakin təsdiq itərsə və ya işləmə tamamlanmazsa, bir neçə dəfə çatdırıla bilər.

Go-da RabbitMQ ilə nümunə (sadələşdirilmiş):

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

for d := range msgs {
    // Mesajın işlənməsi
    processMessage(d.Body)
    // İşləmə təsdiqi
    d.Ack(false)
}

Əgər Ack çağırılmazsa, mesaj yenidən çatdırılacaq.