Domain driven design 事件来源-如何恢复错过的事件

Domain driven design 事件来源-如何恢复错过的事件,domain-driven-design,cqrs,Domain Driven Design,Cqrs,假设我在两个独立的服务中部署了两个聚合。聚合2侦听聚合1的事件 当我长时间停止聚合服务2时,如何恢复所有错过的事件 是否从聚合1事件存储中检索所有错过的事件 如果aggregate 1已经累积了很多事件,该怎么办。是否允许聚合2使用聚合1的快照 1) 是否从聚合1事件存储中检索所有错过的事件 对 2) 如果aggregate 1已经累积了很多事件,该怎么办。是否允许聚合2使用聚合1的快照 对 但是,在严重断开连接的上下文中,分区容差优先于一致性,您必须为聚合2处理的所有事件安排补偿操作。实际上,

假设我在两个独立的服务中部署了两个聚合。聚合2侦听聚合1的事件

当我长时间停止聚合服务2时,如何恢复所有错过的事件

  • 是否从聚合1事件存储中检索所有错过的事件
  • 如果aggregate 1已经累积了很多事件,该怎么办。是否允许聚合2使用聚合1的快照
  • 1) 是否从聚合1事件存储中检索所有错过的事件

    2) 如果aggregate 1已经累积了很多事件,该怎么办。是否允许聚合2使用聚合1的快照

    但是,在严重断开连接的上下文中,分区容差优先于一致性,您必须为聚合2处理的所有事件安排补偿操作。实际上,您可能会遇到这样的情况:如果聚合2正确地从聚合1接收到事件,那么聚合2处理的事件就不可能发生

    是否从聚合1事件存储中检索所有错过的事件

    是的,这将是一般的方法。在基础设施级别,您可以记住上次看到的序列号,然后请求将此后发生的事件推送到您手中

    如果aggregate 1已经累积了很多事件,该怎么办。是否允许聚合2使用聚合1的快照


    这里的答案可能不是——如果两者能够共享一个快照,那么首先可能需要重新考虑聚合边界是否正确。但是,这实际上取决于聚合1的提要的性质。我通常会避免这样做,除非您确实遇到了必要的问题。

    我很惊讶aggregate 2可以使用快照,因为这意味着aggregate 2服务必须知道如何反序列化aggregate 1如果我理解您的问题,aggregate 2的系统已经与aggregate 1的事件耦合在一起。与此相比,反序列化的问题相对较小,因为为需要它的人构建AggregateSnapshotProvider应该很容易。然而,请注意,这不是一个理论上的建议,只是一个实用的建议,如果事件的应用程序使性能下降太多,它会很有用。但请记住:在尝试修复之前先测量性能!