如何验证持久化过程是否已完成,以便正常关闭系统?
how can I verify that the persistence process is completed in order to gracefully shutdown the system?
使用 akka actor - 我正在向更新其状态的 actor 发送大量消息
for (i <-0 to 100000){
persistentActor ! Cmd("foo"+i)
}
并像这样使用 persistAsync
val receiveCommand: Receive = {
case Cmd(data) =>
persistAsync(Evt(s"${data}-${numEvents}"))(updateState)
case "snap" => saveSnapshot(state)
case "print" => println(state)
}
如何验证持久化进程是否已完成以便正常关闭系统?
您的演员将在快照持久化后收到确认:
var count = 0
var shutdown = false
def checkShutDown() = if (shutdown && count == 0) context stop self
def receive = {
case "snap" => count++; saveSnapshot(state)
case SaveSnapshotSuccess(metadata) =>
count --; checkShutDown()
case SaveSnapshotFailure(metadata, reason) =>
count --; checkShutDown()
case ShutDown =>
shutdown = true; checkShutDown()
}
最后,您可以使用 The Reaper pattern 在 actors 关闭后关闭您的系统。
使用 akka actor - 我正在向更新其状态的 actor 发送大量消息
for (i <-0 to 100000){
persistentActor ! Cmd("foo"+i)
}
并像这样使用 persistAsync
val receiveCommand: Receive = {
case Cmd(data) =>
persistAsync(Evt(s"${data}-${numEvents}"))(updateState)
case "snap" => saveSnapshot(state)
case "print" => println(state)
}
如何验证持久化进程是否已完成以便正常关闭系统?
您的演员将在快照持久化后收到确认:
var count = 0
var shutdown = false
def checkShutDown() = if (shutdown && count == 0) context stop self
def receive = {
case "snap" => count++; saveSnapshot(state)
case SaveSnapshotSuccess(metadata) =>
count --; checkShutDown()
case SaveSnapshotFailure(metadata, reason) =>
count --; checkShutDown()
case ShutDown =>
shutdown = true; checkShutDown()
}
最后,您可以使用 The Reaper pattern 在 actors 关闭后关闭您的系统。