|
|
1
1
你可能想复习一下 Reliable Messaging Without Distributed Transactions ,作者:Udi Dahan;也是Pat Helland的论文 Life Beyond Distributed Transactions . 在事件源系统中,意味着域事件的历史 是 在一个系统中,域事件的日志只是一个要与其他“伙伴”通信的消息日志:从根本上说,域事件是描述要从系统的一个部分复制到另一个部分的信息的消息。因此,当我们得到消息已成功复制的确认时,我们可以删除存储在“此处”的副本。 在一个系统中,如果您不能确定所有使用者都收到了域事件(因为使用者列表可能不明确),那么您可能无法删除域事件。 您可以将它们移动——也就是说,您可以将事件历史的显式订阅移动到聚合,然后将隐式订阅移动到历史,而不是对聚合进行隐式订阅。 你呢 能够将域事件的记录视为一个缓存——如果合作伙伴在消息可用的7天内没有消费完消息,那么消息的传递可能不是系统中最大的问题。 你们需要多少个9的交货保证? |
|
|
2
1
域事件是过去发生的事情。你不能删除过去,假设你不是Martin McFly:) 不应从事件存储中删除域事件。如果您想知道您之前是否已经处理过它,您可以添加一个标志来知道它。 更新==>事件管理流程说明 我遵循IDDD(Vaughn Vernon的红皮书,见第287页的图片)的方法:
2) 在BC中,轻量级订阅者将BC发布的所有事件存储在一个“事件存储”中(它是BC的同一数据库中的一个表)。 3) 批处理进程(worker)读取事件存储并将事件发布到消息队列(或您所说的事件总线)。
无论如何,即使工作进程已将事件发送到消息队列,也不应该从事件存储中删除域事件。相反,不要再发送它,但事件是已经发生的事情,你不能(不应该)删除过去发生的事情。 消息队列或事件总线只是一种发送/接收事件的机制,但是事件应该保存在它们创建和发布的BC中。 |
|
|
Birdalicious · 带日志的装饰图案 1 年前 |
|
|
Saulo Torres · 依赖注入程序在DDD项目上不起作用 2 年前 |
|
|
yyqwerty · 领域驱动设计与Scala[关闭] 2 年前 |
|
|
Tony Raimo · 域实体是否应该调用存储库? 8 年前 |
|
|
Seb · DDD只读存储库返回“值对象” 8 年前 |