2016-08-09 3 views
3

ich die Akka.Persistence intro am Petabridge Blog gelesen haben, und ich finde diesen Teil des Codes ein wenig verwirrend:Was ist die Reihenfolge der Akka.Persistence Wiederherstellung?

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

Was Sie wahrscheinlich auf die Genesung tun möchte, ist ... zuerst die letzte Momentaufnahme, dann wiederholen Sie Nachrichten aus dem Journal darüber.

Aber hier haben wir zwei Recover() Deklarationen, und das Journal ist eins zuerst. Wenn Akka .NET Recovery ausführt, wie funktioniert die Reihenfolge dieser Recover() Methoden tatsächlich in der Praxis?

Antwort

2

Recover wird nur verwendet, um den Meldungshandler innerhalb des deklarierten Aktors zu registrieren, genauso wie Receive in ReceiveActor funktioniert. Daher spielt die Reihenfolge der Deklaration von Recovery-Handlern keine Rolle.

Von Kommentar unten:

Während der Wiederherstellung persistenter Schauspieler fragt zunächst, ob es irgendwelche Schnappschüsse sind, kann es verwenden, um von erholen - deshalb SnapshotOffer wird immer vor dem Rest der Ereignisse ausgelöst werden. Dann fragt es nach Ereignissen, die nach dem Snapshot aufgetreten sind. Sie werden in der Reihenfolge verarbeitet, sie stammen aus dem Ereignisjournal und werden vom ersten passenden Recover-Handler verarbeitet.

+0

Nein, 'Command' wird verwendet, um den Message-Handler zu registrieren. 'Recover' ist etwas anderes. – Gigi

+0

'Command' wird verwendet, um Nachrichtenhandler zu registrieren. 'Recover' wird verwendet, um Event-Handler (Objekte, die im Ereignisjournal gespeichert sind) zu registrieren, die erneut abgespielt werden, sobald der persistente Akteur seinen Status wiederherstellt. Entschuldige, dass ich das nicht geschrieben habe, es schien in deinem Anwendungsfall selbsterklärend zu sein. – Horusiath

+0

OK, noch, da Sie zwei Recover() - Deklarationen haben, wie entscheidet Akka .NET, was zuerst zu tun ist? – Gigi

Verwandte Themen