我已经在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()
方法的顺序在实践中如何实际发挥作用?
答案 0 :(得分:2)
Recover
仅用于在声明的actor中注册消息处理程序,与Receive
中ReceiveActor
的工作方式相同。因此,声明恢复处理程序的顺序无关紧要。
来自以下评论:
在恢复期间,持久性actor首先询问是否有任何快照,它可以用来恢复 - 因此
SnapshotOffer
将始终在其余事件之前被触发。然后它会询问收到快照后发生的事件。它们将按顺序处理,它们来自事件日志,并由第一个匹配的Recover
处理程序处理。