2015-02-04 4 views
1

는 - 나는 상태정상적으로 시스템을 종료하기 위해 지속성 프로세스가 완료되었는지 어떻게 확인할 수 있습니까? akka 배우를 사용

for (i <-0 to 100000){ 
    persistentActor ! Cmd("foo"+i) 
} 

의 업데이트 배우에 메시지의 무거운 속도를 보내고 난 지속성 프로세스가 완료되었는지 확인 할 수있는 방법이

val receiveCommand: Receive = { 
    case Cmd(data) => 
     persistAsync(Evt(s"${data}-${numEvents}"))(updateState) 
    case "snap" => saveSnapshot(state) 
    case "print" => println(state) 
    } 

처럼 persistAsync을 사용하고 있습니다 정상적으로 시스템을 종료하려면?

답변

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 pattern를 사용할 수 있습니다.