问题描述
我有一个持久的接收角色和监督策略,可以在出现任何异常时重新启动该角色。我正在使用 akka.net 持久性的快照和事件日志,重启后一切都按预期工作。但是,当我的 actor 启动(未重新启动)时,我不想从快照或日志消息中恢复任何状态,因此我不希望它进入恢复状态,而且我找不到有关如何执行此操作的信息。
在 akka.net 文档中我找到了类恢复,所以我猜我可以做这样的事情
var recovery = new Recovery(fromSnapshot: SnapshotSelectionCriteria.None,toSequenceNr: 0);
所以我不恢复任何快照或任何消息,但我不知道如何让我的演员知道何时使用该恢复对象,以及如何确保它在重新启动后使用默认恢复行为。
解决方法
所以您是对的 - 在您的演员中自定义此行为的最佳方法是覆盖 Recovery
property
解决问题的最佳方法可能是执行以下操作:
public class MyPersistentActor : PersistentActor{
private Recovery _myRecovery;
public virtual Recovery Recovery => _myRecovery ?? Recovery.None;
protected override void PostRestart(Exception reason){
_myRecovery = new YourRecovery();
base.PostRestart(reason);
}
}
您需要覆盖 PostRestart
方法,因为它是在演员重新启动后创建的 新 演员实例上调用的,而不是旧演员实例。这应该允许您自定义运行时行为。