Вопрос с собеседования · Брокеры сообщений

Что означает семантика доставки at-least-once?

JuniorРетраи, DLQ и идемпотентность
Ещё спрашивают так:
  • Что значит «хотя бы один раз»?
Коротко

At-least-once — сообщение не теряется, но может прийти несколько раз: отправитель повторяет, пока не получит подтверждение.

  • Дубли — нормальная часть этой гарантии
  • Обработчик должен быть идемпотентным
  • Стандарт для бизнес-событий

А ещё At-most-once — наоборот: без повторов, но с риском потери

Подробно

Дубли возникают естественно: подтверждение потерялось в сети, отправитель не знает, дошло ли сообщение, и повторяет. Противоположный вариант at-most-once не даёт дублей, но допускает потери. Поэтому в большинстве систем выбирают именно at-least-once и переносят ответственность на потребителя — обработка должна давать одинаковый результат при повторе, что обычно обеспечивают идентификатором сообщения и отметкой об уже обработанных.

Что хотят услышать

  • Определение и откуда дубли.
  • Требование идемпотентности.

Частые ошибки

  • Считать, что настройками брокера можно полностью избавиться от дублей.
  • Обрабатывать сообщения так, что повтор создаёт второй побочный эффект.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Сообщение придёт ровно один раз при любых обстоятельствах
  • ✗Сообщение может быть потеряно, но никогда не продублируется
  • ✓Потерь не будет, но возможны повторы
  • ✗Сообщение доставляется не раньше чем через заданный интервал

Что спросят дальше

  • Как сделать обработчик идемпотентным?
  • Чем at-most-once отличается по рискам?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования