Моя пямятка по Integration Events:
1. Integration Events — события для других модулей, отражающие неизменные факты, которые могут быть им интересны. Публичный контракт.
2. Integration Events — это граница модуля. Без них модуль закрыт для внешнего мира. Integration Events не должны раскрывать внутреннюю модель модуля.
3. Integration Events могут мапиться из внутренних событий или быть самостоятельными, если нет соответствующего внутреннего события.
4. Integration Events отправляются асинхронно, после успешного коммита транзакции. Их использование может требовать Transactional Outbox и идемпотентности — в зависимости от критичности потери или дубля.
5. Integration Events содержат данные, нужные их получателям. Данные должны быть простыми типами (строки, числа, массивы), так как сериализуются при передаче.
6. Integration Events версионируются — при несовместимых изменениях появляются новые версии (v1, v2), а предыдущие остаются доступными существующим получателям.
7. Integration Events могут связывать несколько модулей в сагу — последовательность взаимодействий между модулями с компенсацией выполненных действий в случае ошибки.