如何在恢复期间拒绝快照?

How do I reject a snapshot during recovery?

我目前正在尝试使用 Akka Persistence 为事件源应用程序实现快照。我在这里尝试采用的策略是:

但是,我发现我无法在恢复期间丢弃快照。如果快照存储中有快照,则不会向我提供更早的事件。

我很难理解应该如何处理这个问题。这里的正确方法是什么?

有一件事我不明白,状态对象是什么?它从哪里得到 schemaVersion? state 不正是从快照/事件重建的你的 actor 的状态吗?

在任何情况下,您都不能删除 and/or 提供的快照。相反,您可以执行以下操作:

  1. 添加配置drop-snapshot(默认为false
  2. preStart

    override def preStart(): Unit = {
       super.preStart()
       if (dropSnapshot) deleteSnapshots(SnapshotSelectionCriteria.Latest)
    }
    
  3. 覆盖recovery方法

    override def recovery = {
       if (dropSnapshot) {
         Recovery(fromSnapshot = SnapshotSelectionCriteria.None)
       } else {
         Recovery(fromSnapshot = SnapshotSelectionCriteria.Latest)
       }
    }