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 для критичных публикаций.
- Проектируйте обработчики под дубликаты.