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