我的演员扩展了akka.persistence.PersistentActor。 我想首先发送一个消息案例类SetConfig(config:String),并确保在保留和应用SetConfig之前没有处理任何其他消息。
实现这一目标的最佳做法是什么?
答案 0 :(得分:1)
我会将Akka FSM与PersistentActor
一起使用。
您可以拥有以下两种状态:
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模式来保持状态。