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 не бъде извикан, съобщението ще бъде доставено отново.