CQRS:存储事件和发布他们 - 我如何以安全的方式做到这一点?(CQRS: Storing eve

2019-07-04 00:43发布

正如我在所学到为什么CQRS库发布事件,而不是事件存储? 它的CQRS库的任务将事件发布。 到现在为止还挺好。

当然,存储事件和发布他们应该是一个单一的事务中。 从技术上讲,这意味着写一个(或多个)记录到存储和发布一个(或多个)事件的消息总线。 因此,一个简单的数据库事务是远远不够的,它应该是一个分布式的一个。

现在,不幸的是,许多NoSQL数据库(如MongoDB的)不支持ACID兼容交易,甚至没有说话的发生在分布式事务的可能性。 更过,有消息队列在那里,不支持分布式事务也是如此。

所以,问题是:我该如何面对呢?

有没有办法使用推荐的模式?

Answer 1:

您的仓库自然就发布事件,它不就得了。 在这种情况下的解决方案是使用事件存储为队列。 你将有一个后台进程监视事件存储新事件,公布他们(比如)一辆公交车,然后将其标记为分派。

与往常一样,有取舍。 你可能会不得不面对一次的,至少消息和幂等处理。 这比用一个简单的分布式事务更加复杂。

乔纳森·奥利弗写这个话题,可以帮助你走出几个职位: 删除2PC , 如何避免两阶段提交 , 幂等模式



文章来源: CQRS: Storing events and publishing them - how do I do this in a safe way?