使用akka-persistence的CQRS + Event Sourcing实现

时间:2014-03-18 09:44:06

标签: akka cqrs event-sourcing akka-persistence

我想使用akka-persistence事件采购功能,以便在我的新项目中实现CRQS +事件采购理念。问题是除了文档(http://doc.akka.io/docs/akka/snapshot/scala/persistence.html)之外,我找不到任何好的示例或指南如何处理它。该文档在解释体系结构的所有构建块(如处理器,视图,通道)方面非常出色,但没有解释如何将它们组合在一起。

所以问题是:我应该如何在akka-persistence中将写模型与读模型连接起来?我想出了三个选择:

  • 直接连接Eventsourcedrocessor - >查看,视图直接从期刊接收所有事件。这似乎是最简单的解决方案,但我想知道我们是否可以使用这种方法在不同节点上分发处理器和视图。

  • Eventsourcedrocessor - >频道 - >查看/普通演员。与第一个选项有什么区别?如果这是正确的解决方案,为什么我们在akka-persistence构建块中有视图?我应该使用Channels还是PersistentChannels?

  • Eventsourcedrocessor - >某种事件总线(例如context.system.eventStream) - >查看/演员。

最好的方法是什么?为什么?

4 个答案:

答案 0 :(得分:4)

EventsourcedProcessor - >查看是这样做的方法。视图从日志中重放,因此在将视图放在另一台计算机上时需要分布式日志。可在此处找到日记实施列表:http://akka.io/community/

答案 1 :(得分:4)

我也发现很难找到关于如何处理Akka Persistence和Event Sourcing的任何好例子。因此,我使用Dropwizard和Akka Persistence akka-persistence-java-example

创建了这个示例应用程序

此示例使用PersistenceActor来编写数据,使用PersistenceQuery来读取数据。

答案 2 :(得分:0)

虽然我认为从EP的期刊阅读是一种恢复/重建View的好方法,但似乎是在查看期刊(akka.persistence.view.auto-update-interval)。如果想要读取模型的同步更新(某些人建议它可能是读取模型的一个很好的起点),这将是不合适的。我建议(并且喜欢自己使用)日志进行恢复,但是对于直播活动有一些pub-sub架构。我知道这可能会非常困难,但这似乎是正确的做法。但是,我不知道如何使用Akka Persistence或其他库建议如何使用分布式pub-sub,或者甚至确定它是否真的可行。

作为替代方案,当他们关注的期刊更新时,是否可以通知视图?

答案 3 :(得分:0)

关于这个话题真的很好讨论。我只是粘贴https://groups.google.com/forum/#!topic/akka-user/MNDc9cVG1To后的结论。希望它能帮助读者登陆这篇文章。