advanced

Inbox pattern

Записывайте consumed message IDs и processing state, чтобы handlers tolerating redelivery без повторения side effects.

Inbox записывает incoming message IDs и processing state в БД consumer до завершения side effects. С at-least-once delivery предотвращает duplicate charges, double shipments или повторные emails при redelivery.

Компромисс: дополнительное хранение и transactional overhead против корректных exactly-once side effects на уровне приложения.

На интервью: разберите flow: receive, insert inbox, work, mark done, ack broker; crash между шагами.

Типовые ошибки: ack до завершения processing; inbox без unique constraint на message ID; вечное хранение старых inbox rows.

Чеклист:

  • Unique key на broker message ID или business idempotency key.
  • Processing в одной transaction с domain update где возможно.
  • Ack только после durable processing record.
  • Archive или TTL для обработанных inbox entries.