2016-08-09 11 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); 
    }); 

は、最初の最後のスナップショットを取る...で、ジャーナルからメッセージを再生します。

しかしここでは2つの宣言があり、ジャーナル1が最初です。 Akka .NETがリカバリを実行すると、これらの方法の順序は実際にどのように実際に再生されますか?

答えて

2

Recoverは、ReceiveActorReceiveと同じ方法で、宣言されたアクタ内のメッセージハンドラを登録するためにのみ使用されます。したがって、回復ハンドラの宣言の順序は重要ではありません。以下のコメントから

リカバリ中の永続俳優が最初の任意のスナップショットが存在する場合、それはから回復するために使用することができます頼む - のでSnapshotOfferは常にイベントの残りの部分の前にトリガされます。次に、スナップショットの後に発生したイベントを要求します。それらは順番に処理され、イベントジャーナルから来て、最初に一致するRecoverハンドラによって処理されます。

+0

いいえ、「コマンド」はメッセージハンドラを登録するために使用されます。 'Recover'は何か他のものです。 – Gigi

+0

'Command'はメッセージハンドラを登録するために使用されます。 'Recover'は、イベントハンドラ(イベントジャーナル内に格納されたオブジェクト)を登録するために使用され、永続アクタがその状態を回復すると再生されます。申し訳ありませんが、私はそれを書いていませんでした。あなたのユースケースでは自明であるようでした。 – Horusiath

+0

あなたは2つのRecover()宣言を持っているので、Akka .NETはどのようにして最初にやるべきかを決定します。 – Gigi

関連する問題