Microservices 删除事件源系统中带有墓碑和公共/私有数据的事件

Microservices 删除事件源系统中带有墓碑和公共/私有数据的事件,microservices,domain-driven-design,cqrs,event-sourcing,Microservices,Domain Driven Design,Cqrs,Event Sourcing,David Schmitz提到了一种在事件源系统中删除用户数据的解决方案。它的工作原理如下: 删除用户的所有事件 为此特定用户发出墓碑事件 其他服务也可能侦听墓碑事件并清理数据 问题1 墓碑事件写入哪个流? 特定用户的事件流?或者是否有专门针对墓碑事件的事件流 此外,为了保留一些数据(例如用户id),他建议将用户流分为公共和私人事件流。() 问题2 您实际上如何将事件附加到两个流中? 假设一个命令需要将事件同时附加到公共和私有用户流。如何确保已附加这两个事件?事件存储是否将SomeUser

David Schmitz提到了一种在事件源系统中删除用户数据的解决方案。它的工作原理如下:

  • 删除用户的所有事件
  • 为此特定用户发出墓碑事件
  • 其他服务也可能侦听墓碑事件并清理数据
问题1 墓碑事件写入哪个流?

特定用户的事件流?或者是否有专门针对墓碑事件的事件流


此外,为了保留一些数据(例如用户id),他建议将用户流分为公共和私人事件流。()

问题2 您实际上如何将事件附加到两个流中?

假设一个命令需要将事件同时附加到公共和私有用户流。如何确保已附加这两个事件?事件存储是否将
SomeUserEventHapppendPrivate
SomeUserEventHappPendPublic
发布到事件总线?您会独立地为这两个流创建快照吗?在我看来,这似乎是一个很大的开销



另外,我还想听听在事件源系统中删除数据的其他策略(除了加密事件然后删除密钥)。问题1:

您可以从一个事件开始,UserDeleteRequested有两个标志,一个用于公共,一个用于私有。您将拥有负责此更改的BoundedContext(和关联流)。如您所述,其他服务可以侦听该事件

问题2:至于将数据分成两个流,这听起来像是同一个BC中的两个聚合。您实际上如何将事件附加到两个流中?您可以使用一个进程/传奇来加载每个聚合,并在实际上是两阶段提交的情况下引发墓碑事件。

问题1:能否进一步解释“标志”的含义?正如我正确理解的那样,
UserDeleteRequested
事件将存储在被删除用户的流中?问题#2:因此,我会将例如
someusereventhappendprivate
附加到私有流中,并使用saga触发将
SomeUsererEventHappendPublic>附加到公共流中?事件存储将在事件总线上发布这两个事件?@flolu Question#1:我所说的标志只是布尔值。您可以引发一个事件UserDeleteRequested(public=true,private=false)。是的,这个事件将出现在UserAggregate流中。@flolu问题#2:我特别指的是向两个流(公共流和私有流)添加墓碑事件的问题。您将在用户流中引发UserDeleteRequested事件,然后使用saga将这些更改传播到公共和私有聚合/流。这在很大程度上取决于您对流和聚合的实现和定义,所以请对此持保留态度。