私にはしつこい俳優がいます。初めて起動するとき (データベースが空)、初期データを保持します。しかし、期待どおりに状態が更新されません。最初のメッセージが処理された後にのみ更新されます。状態の更新後にアクターにメッセージの処理を開始させるにはどうすればよいですか?
アクターコード
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