akka - persistence -是否可以使用akka PersistentActor的可变状态?



是否可以使用可变状态akka PersistentActor或者我应该使用receiveCommand()而不是receiveRecover()context.become/unbecome,因为它将在状态更改之前等待完全恢复。

一般来说,你不能PersistentActor中使用context.become和朋友,因为它们会影响receive方法,这是由PersistentActor提供的(并处理一些内部消息,这些消息是实现细节,所以你真的不想复制它)。

context.become更明确的可变状态是一个更好的路径。

有一种模式,将所有的可变状态包装成一个单一的不可变对象(例如Scalacase class),并将命令处理延迟到该对象,它可以像这样简单:

var state: State = ???
override val receiveCommand: Receive = state.processCommand(_)

你可以更进一步,让你的processCommand方法在State返回,例如(Seq[Event], () => Try[Unit])…这实际上与Lagom或Typed Persistence等项目所做的非常接近。

相关内容

  • 没有找到相关文章

最新更新