akka持久性演员如何首先收到保证的特定消息?

时间:2015-03-31 15:38:59

标签: scala akka actor persistent

我的演员扩展了akka.persistence.PersistentActor。 我想首先发送一个消息案例类SetConfig(config:String),并确保在保留和应用SetConfig之前没有处理任何其他消息。

实现这一目标的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我会将Akka FSMPersistentActor一起使用。

您可以拥有以下两种状态:

sealed trait State
case object Idle extends State
case object Active extends State

和这个数据:

sealed trait Data
case object Uninitialized extends Data
final case class Config(config: String) extends Data

你的演员将会延伸FSM[State, Data],并且会:

startWith(Idle, Uninitialized)

然后,您可以说SetConfig时只接受Idle条消息:

when(Idle) {
  case Event(SetConfig(conf), Uninitialized) =>
    goto(Active) using Config(conf)
}

一旦转换到Active,您就可以收到以下消息:

when(Active) {
  case Event(...

// don't forget to start it up in initial state with:
initialize()

最后,在状态转换中,您可以使用常规的Akka Persistence模式来保持状态。