1

akka アクターを使用 - アクターの状態を更新する大量のメッセージをアクターに送信しています

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)
  }

システムを正常にシャットダウンするために、永続化プロセスが完了したことを確認するにはどうすればよいですか?

4

1 に答える 1

2

アクターは、スナップショットの永続化後に確認を受け取ります。

 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 パターンを使用して、アクターのシャットダウン後にシステムをシャットダウンできます。

于 2015-02-04T11:07:09.080 に答える