Как я узнал в Почему репозиторий CQRS публикует события, а не хранилище событий? это задача репозитория CQRS для публикации событий. Пока что так хорошо.
Конечно, хранение событий и публикация их должны быть в пределах одной транзакции. Технически это означает запись одной (или более) записей в хранилище и публикацию одного (или нескольких) событий на шине сообщений. Следовательно, простой транзакции базы данных недостаточно, она должна быть распределенной.
Теперь, к сожалению, многие базы данных NoSQL (такие как MongoDB) не поддерживают транзакции, совместимые с ACID, даже не говоря о возможности прохождения в распределенной транзакции. Более того, есть очереди сообщений, которые также не поддерживают распределенные транзакции.
Итак, вопрос: как мне с этим справиться?
Существует ли рекомендуемый шаблон?