Я бы использовал 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.
person
yǝsʞǝla
schedule
01.04.2015