3

我在 Petabridge 博客上阅读了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()方法的顺序实际上是如何发挥作用的呢?

4

1 回答 1

2

Recover仅用于在声明的actor中注册消息处理程序,与作品中的方式Receive相同ReceiveActor。因此,声明恢复处理程序的顺序并不重要。

从下面的评论:

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

于 2016-08-10T07:30:30.387 回答