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?