advanced

Outbox pattern

Persist state changes и outgoing messages atomically в одном service, затем relay messages safely с retry и deduplication.

Outbox pattern записывает domain changes и исходящие сообщения в одной local database transaction, затем relay process публикует в broker. Избегает dual-write races: БД commit без message или наоборот.

Компромисс: дополнительная таблица, relay lag и deduplication у consumers — но сильная надёжность в границах сервиса.

На интервью: сравните outbox с наивным «save then publish»; объясните relay failure handling и ordering guarantees.

Типовые ошибки: publish до commit; relay без backoff; consumers не idempotent.

Чеклист:

  • Outbox rows в той же transaction, что domain writes.
  • Надёжный relay с retries и metrics.
  • Помечайте published rows и безопасно prune.
  • Парьте с idempotent consumers или inbox.