私は永続的な俳優を持っています。最初(データベースが空である)に開始するとき、私はいくつかの初期データを保持します。しかし、状態は私が期待するように更新されません。最初のメッセージが処理された後で更新されます。状態の更新後に俳優にメッセージの処理を開始させる方法を教えてください。あなたは再考したいAkkaは最初のメッセージの後に回復完了の更新状態を維持します
俳優コード
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