Akka.net持久性如何配置仅在重启后而不是在启动时进入恢复阶段

问题描述

我有一个持久的接收角色和监督策略,可以在出现任何异常时重新启动该角色。我正在使用 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 方法,因为它是在演员重新启动后创建的 演员实例上调用的,而不是旧演员实例。这应该允许您自定义运行时行为。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...