Вопрос с собеседования · Spring

Что означает подтверждение (ack) сообщения в RabbitMQ?

JuniorSpring AMQP и RabbitMQRabbitMQ
Ещё спрашивают так:
  • Что такое подтверждение сообщения?
Коротко

Ack — сигнал брокеру, что сообщение обработано: до него сообщение считается невыполненным и при обрыве соединения вернётся в очередь другому потребителю.

  • Nack/reject — отказ: вернуть в очередь или отправить в DLX
  • В Spring AMQP режим AUTO подтверждает после успешного метода
  • Отсюда at-least-once и идемпотентность

А ещё Prefetch ограничивает число неподтверждённых

Подробно

Именно поэтому подтверждение отправляют после обработки, а не при получении: если потребитель упадёт посередине, брокер не получит подтверждения и передаст сообщение другому — работа не потеряется. Обратная сторона — при повторной доставке обработка должна выдерживать дубли. Отдельно существует подтверждение со стороны издателя, которое сообщает, что брокер принял сообщение на хранение, — это другая гарантия и другая сторона обмена.

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

  • Смысл ack и что без него.

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

  • Подтверждать сообщение до фактической обработки.
  • Путать подтверждение потребителя с подтверждением издателя.

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

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

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

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

  • Чем опасен возврат сообщения в очередь при постоянной ошибке?
  • Зачем нужен предварительный лимит выборки (prefetch)?

Разбор темы

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

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

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

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

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