Я бы использовал Akka FSM вместе с PersistentActor
.
Вы можете иметь эти 2 состояния:
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
You актер продлит 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 настойчивости.