advanced

RabbitMQ acknowledgements

Acknowledge only after safe processing, понимая requeue, negative acknowledgements, publisher confirms и duplicate risk.

Consumer acknowledgement сообщает брокеру, что работа безопасно завершена. Подтверждайте после того, как побочный эффект устойчив — commit в БД, запись идемпотентного маркера или завершённый внешний вызов с компенсацией. Nack с requeue повторяет transient-сбои; reject без requeue отправляет poison-сообщение в dead-letter.

Publisher confirms подтверждают, что брокер принял сообщение до ответа пользователю об успехе. Manual ack — базовый режим для надёжности; auto-ack теряет сообщения при падении consumer в середине обработки. At-least-once означает дубликаты без идемпотентных обработчиков.

На интервью: разберите момент ack для payment handler, объясните nack против reject и свяжите publisher confirms с HTTP-ответом API.

Типовые ошибки: ack до commit в БД; бесконечный requeue при постоянных ошибках; отсутствие publisher confirms при HTTP 200; вера в exactly-once только из-за manual ack.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Подтверждайте только после безопасной обработки.
  • Используйте nack/reject с явной политикой requeue.
  • Включите publisher confirms для критичных публикаций.
  • Проектируйте обработчики под дубликаты.