2015-03-31 3 views
0

Мой актер расширяет akka.persistence.PersistentActor. Я хочу сначала отправить класс case Case SetConfig (config: String) и убедиться, что никакое другое сообщение не обработано до того, как SetConfig будет сохранен и применен.Как можно начинать аккордовый актер с гарантированным первым сообщением?

Какова наилучшая практика для достижения этой цели?

ответ

1

Я бы использовал 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 настойчивости.