Sobes.tech
Middle — Middle+

შეგიძლიათ ახსნათ შეტყობინებების იერარქია მიწოდების გარანტიით, სადაც შეტყობინება მინიმუმ ერთხელ იქნება მიწოდებული?

sobes.tech AI

პასუხი AI-სგან

მინიმუმ ერთხელ მიწოდების გარანტია (at-least-once delivery) ნიშნავს, რომ სისტემა უზრუნველყოფს შეტყობინების მიწოდებას მიმღებამდე მინიმუმ ერთხელ, მაგრამ დუბლიკატები შეიძლება მოხდეს.

ასეთი გარანტიით შეტყობინებების ჰიერქია ჩვეულებრივ აშენებულია შემდეგ დონეებზე:

  1. შეტყობინების გაგზავნა — შეტყობინება მოთავსებულია რიგში ან შეტყობინების ბროკერში.
  2. მიღების დადასტურება — მიმღებმა დადასტურება გამოგზავნა შეტყობინების მიღებაზე (acknowledgment).
  3. მეორედ გაგზავნა — თუ დადასტურება არ მიიღება მითითებულ დროში, შეტყობინება გაიგზავნება ხელახლა.

Go-ში, მაგალითად, Kafka ან RabbitMQ ბროკერებთან მუშაობისას, ასეთი ლოგიკა შეიძლება განხორციელდეს:

  • შეტყობინება გამოქვეყნებულია რიგში.
  • მიმღებმა გამოამუშავა შეტყობინება და გამოგზავნა დადასტურება.
  • თუ დადასტურება არ მოდის, ბროკერი ხელახლა მიაწვდის შეტყობინებას.

ეს უზრუნველყოფს, რომ შეტყობინება მინიმუმ ერთხელ მიეწოდება, მაგრამ შეიძლება მიეწოდოს რამდენიმე ჯერ, თუ დადასტურება დაკარგულია ან დამუშავება არ დასრულებულა.

Go-ში RabbitMQ-ის მაგალითი (სადავიწრო):

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

for d := range msgs {
    // შეტყობინების დამუშავება
    processMessage(d.Body)
    // დამუშავების დადასტურება
    d.Ack(false)
}

თუ Ack არ გამოიძახება, შეტყობინება ხელახლა მიეწოდება.