2016-08-09 4 views
3

내가 Petabridge 블로그에서 Akka.Persistence intro을 읽었습니다, 나는 조금 혼란 코드의이 부분을 찾을 수 :Akka.Persistence 복구의 순서는 무엇입니까?

당신은 아마 ... 먼저 마지막 스냅 샷을한다 복구에 수행 할 작업을
Recover<string>(str => _msgs.Add(str)); // from the journal 
    Recover<SnapshotOffer>(offer => { 
     var messages = offer.Snapshot as List<string>; 
     if(messages != null) // null check 
      _msgs = _msgs.Concat(messages); 
    }); 

, 그 다음에 저널의 메시지를 재생하십시오.

그러나 여기에는 두 개의 Recover() 선언이 있으며 저널 중 하나가 첫 번째입니다. Akka .NET이 복구를 실행하면 이러한 Recover() 메서드의 순서가 실제로 어떻게 실제로 실행됩니까?

답변

2

RecoverReceiveActorReceive과 동일한 방식으로 선언 된 액터 내에 메시지 처리기를 등록하는 데에만 사용됩니다. 따라서 복구 핸들러를 선언하는 순서는 중요하지 않습니다. 아래의 코멘트에서

:

복구 동안 지속 배우가 먼저 모든 스냅 샷이있는 경우, 그것을 복구하는 데 사용할 수있는 요청 - 그러므로 SnapshotOffer 항상 이벤트를 우선적으로 트리거됩니다. 그런 다음 스냅 샷 이후 발생한 이벤트를 묻습니다. 그들은 순서대로 처리 될 것이고, 그들은 사건 일지에서 나오고 첫번째 일치하는 Recover 처리자에 의해 처리 될 것이다.

+0

아니요, 'Command'는 메시지 처리기를 등록하는 데 사용됩니다. '복구 '는 다른 것입니다. – Gigi

+0

'Command'는 메시지 핸들러를 등록하는 데 사용됩니다. 'Recover'는 이벤트 처리기 (이벤트 저널에 저장된 오브젝트)를 등록하는 데 사용되며, 지속성있는 액터가 상태를 복구하면 다시 재생됩니다. 죄송합니다. 필자는이를 쓰지 않았으며 유스 케이스에서는 자명하다. – Horusiath

+0

그래도 여전히 Recover() 선언이 두 개인 경우 Akka .NET은 먼저 어떤 작업을 수행할지 결정합니다. – Gigi

관련 문제