Middle — Middle+
შეგიძლიათ ახსნათ შეტყობინებების იერარქია მიწოდების გარანტიით, სადაც შეტყობინება მინიმუმ ერთხელ იქნება მიწოდებული?
sobes.tech AI
პასუხი AI-სგან
მინიმუმ ერთხელ მიწოდების გარანტია (at-least-once delivery) ნიშნავს, რომ სისტემა უზრუნველყოფს შეტყობინების მიწოდებას მიმღებამდე მინიმუმ ერთხელ, მაგრამ დუბლიკატები შეიძლება მოხდეს.
ასეთი გარანტიით შეტყობინებების ჰიერქია ჩვეულებრივ აშენებულია შემდეგ დონეებზე:
- შეტყობინების გაგზავნა — შეტყობინება მოთავსებულია რიგში ან შეტყობინების ბროკერში.
- მიღების დადასტურება — მიმღებმა დადასტურება გამოგზავნა შეტყობინების მიღებაზე (acknowledgment).
- მეორედ გაგზავნა — თუ დადასტურება არ მიიღება მითითებულ დროში, შეტყობინება გაიგზავნება ხელახლა.
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 არ გამოიძახება, შეტყობინება ხელახლა მიეწოდება.