У меня стойкий актер. Когда он запускается в первый раз (база данных пуста), я сохраняю некоторые исходные данные. Но состояние не обновляется, как я ожидал. Он обновляется только после обработки первого сообщения. Как я могу заставить актера начать обрабатывать сообщения после обновления состояния?
Код актера
class TestActor extends PersistentActor {
var numberOfEvents = 0
def updateState(e: Any): Unit = {
println("updating")
numberOfEvents += 1
}
override def receiveRecover: Receive = {
case RecoveryCompleted =>
if (numberOfEvents == 0) {
println("persisting")
persist("foo")(updateState)
}
}
override def receiveCommand: Receive = {
case _ => {
println("answering")
sender ! numberOfEvents
}
}
}
Тестовый код
Await.result(actorRef ? "stats", Duration.Inf) shouldBe 0 // I wan't 1 here
Await.result(actorRef ? "stats", Duration.Inf) shouldBe 1
Выход
persisting
answering // why this goes before updating?
updating
answering