Akka.Persistence恢复的顺序是什么?

时间:2016-08-09 20:57:35

标签: akka.net akka.net-persistence

我已经在Petabridge博客上阅读了Akka.Persistence intro,我觉得这部分代码有点令人困惑:

    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()方法的顺序在实践中如何实际发挥作用?

1 个答案:

答案 0 :(得分:2)

Recover仅用于在声明的actor中注册消息处理程序,与ReceiveReceiveActor的工作方式相同。因此,声明恢复处理程序的顺序无关紧要。

来自以下评论:

  

在恢复期间,持久性actor首先询问是否有任何快照,它可以用来恢复 - 因此SnapshotOffer将始终在其余事件之前被触发。然后它会询问收到快照后发生的事件。它们将按顺序处理,它们来自事件日志,并由第一个匹配的Recover处理程序处理。