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.