Как не потерять событие между сохранением и публикацией: паттерн transactional outbox
Crossing Boundaries with Integration Events

Статья из серии о Domain-Driven Design рассматривает интеграционные события — контракты, через которые один bounded context сообщает другому о фактах. Разбираются ошибки проектирования: публикация внутренней модели, событий, отражающих изменения состояния, а также использование event sourcing и CDC потоков как готовых интеграционных событий. Предлагается переводить доменные события в публичные контракты на границе контекста, а для надежной доставки — применять паттерн transactional outbox, гарантирующий атомарность сохранения и публикации. Также обсуждается идемпотентность обработки сообщений при at-least-once delivery.
Асинхронный обмен сообщениями сам по себе не устраняет связанность; контракт все равно должен выражать бизнес-смысл.