3

我非常熟悉PersistentActorPersistentView在实现Akka Persistence时是如何工作的。

据我所知,考虑下面的例子。

Scala 案例类Contact

case class Contact(id: String, version: Int, fName: String, lName: String, age: Int)

日志中的 PersistentActor 持久事件是:

ContactCreated("123af-232ff-232d", 1, "john", "doe", 25)
FirstNameChanged("123af-232ff-232d", 2, "jan")
AgeChanged("123af-232ff-232d", 3, 27)
FirstNameChanged("123af-232ff-232d", 4, "janet")

每次从响应式 UI 发送命令时,如果验证成功 202 CommandAccepted 或任何 CommandValidationError 被触发,则此类新事件将持续存在。

但是在响应式环境没有明显延迟的情况下,UI 必须能够查询REST API 后端并在后端WebSocket 推送通知 UI UUID "123af-232ff-232d" 可供读取后显示最新的Contact 对象:

Contact("123af-232ff-232d", 4, "janet", "doe", 27)

据我了解,此结果应在将所有事件与可用的最新数据合并后发生。

所以,我真正关心的是:在这个后端应用程序中,我如何以及在哪里处理这些事件,一旦它们生成,合并这些数据,并存储合并的数据以供查询端读取。

如果有人可以阐明实施或纠正我的想法,请提前非常感谢。

4

1 回答 1

0

的当前状态Contact可能不像实际状态那样是视图,并且在视图中您不会接受最终的一致性,这将是视图的情况。

我会将其保留为持久参与者内部状态,并允许对参与者进行查询以获取当前Contact并使用它。

于 2015-09-05T15:57:19.070 回答