CQRS: Armazenando eventos e publicando-os - como faço isso de maneira segura?

Como aprendi emPor que o repositório CQRS está publicando eventos, não o armazenamento de eventos? é a tarefa do repositório CQRS para publicar eventos. Por enquanto, tudo bem.

Obviamente, armazenar os eventos e publicá-los deve estar dentro de uma única transação. Tecnicamente, isso significa gravar um (ou mais) registros no armazenamento e publicar um (ou mais) eventos em um barramento de mensagens. Portanto, uma simples transação de banco de dados não é suficiente, ela deve ser distribuída.

Agora, infelizmente, muitos bancos de dados NoSQL (como o MongoDB) não suportam transações compatíveis com ACID, nem mesmo para falar sobre a possibilidade de ocorrer em uma transação distribuída. Além disso, há filas de mensagens por aí que não suportam transações distribuídas também.

Então a questão é: como eu lido com isso?

Existe um padrão recomendado para usar?

questionAnswers(1)

yourAnswerToTheQuestion