事件采购没有最终的一致性?

时间:2017-08-08 18:58:45

标签: cqrs event-sourcing

我们即将放弃ES因为我们需要一致的读取模型来处理流程,并且在试图弄清楚如何保存ES时,我们正在考虑一致的读取方面。基本上,命令将由AR运行,生成事件列表。这些事件将首先保存到事件存储中,然后(通过一些额外的编码)专门写入读取模型(以事务方式,例如,来自单个命令的所有事件的所有预测都将被包装在事务中)。只有在那之后才能发布事件。所以基本上我的代码就像:

void ExecuteCommand(Command cmd) {
   // validate and stuff...
   var events = GenerateEvents(cmd);
   PersistAllSync(events);
   ApplyProjectionsSync(events);
   PublishAsync(events)
}

除了明显的性能问题(分布式事务的种类,基本上序列化所有命令)......为什么没有人这样做?

1 个答案:

答案 0 :(得分:0)

我不是专家,但无论如何我都可以尝试回答这个问题。

为了获得事务一致性,我将生成的事件分组(在相同的聚合/事务范围内),并将它们全部原子地应用于我的读取模型。我还发布了分组到交易中的事件。它对我来说很好,所以它当然是可能的。

为了避免本地读取模型的最终一致性(以便我可以在命令响应中返回新的和一致的状态),我还在事务中本地应用事件。只要你没有太多的读模型来更新我猜这应该不是问题。对于某些需要非最终更新的读模型,您可以使用此功能,并且如果需要,可以“正常”方式处理其余模型。

相关问题