【问题标题】:Why is the CQRS repository publishing events, not the event store?为什么 CQRS 存储库发布事件,而不是事件存储?
【发布时间】:2012-10-01 17:17:41
【问题描述】:

根据http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young,负责使用事件发布者发布事件的组件是存储库。

我的问题很简单:为什么会这样?

在这篇博文中,我们被告知:

域存储库负责发布事件,这通常与将事件一起存储在事件存储中的单个事务中。

我本以为这是事件存储的一项任务:一旦存储了一个(或多个事件),它就会被发布。

那么为什么它在存储库中?

【问题讨论】:

    标签: cqrs


    【解决方案1】:

    您的域模型不知道存储机制。另一方面,它必须确保发布适当的事件,无论您使用事件存储、经典 SQL 存储还是任何其他持久性方式。

    如果您依赖事件存储来发布事件,您将与存储机制紧密耦合。

    【讨论】:

    • 因为事件的存储和该事件的发布需要原子操作,同时仍然避免2PC,并且正如您所提到的,这些事件的发布不应该是底层事件存储的责任, 是在设置“未发布”标记的同时使用数据库表存储事件的解决方案。是否有另一个进程从该表中读取标记为“未发布”的事件,然后发布它们,然后设置标记并提交事务?如果是这种情况,那么轮询该表以获取未发布的事件是实现此目的的方法吗?
    【解决方案2】:

    存储和发布事件必须是原子指令,因为如果两个操作之一失败,则此事件的侦听器将与事件的生产者不同步。

    与从事件存储中发布事件相比,还有另一种(更昂贵的)解决方案,即使用 2pc 事务(两阶段提交)。

    您可以在这里找到更多有趣的信息:https://cqrs.wordpress.com/documents/building-event-storage/

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多