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

时间:2017-09-21 19:40:47

标签: scala akka akka-persistence

我目前正尝试使用Akka Persistence实现对事件源应用程序的快照。我试图采取的策略是:

  • 每次X事件保存快照
  • 在我的州对象上维护schemaVersion属性。如果我改变回复活动的方式,schemaVersion的目的是允许我进化/迁移我的状态。
  • 在恢复期间,如果我收到state.schemaVersion小于我当前架构版本的SnapshotOffer,则丢弃该快照并从头开始重播事件
  • 在恢复完成后删除早于我最新有效快照的所有快照

但是,我发现我无法在恢复过程中丢弃快照。如果快照存储中有快照,则不会向我提供先前的事件。

我很难读懂如何处理这个问题。这里有什么正确的方法?

1 个答案:

答案 0 :(得分:2)

我有一件事没有得到,状态对象是什么?从哪里得到 <?php if ( trim( get_theme_mod('pocketcars_url1' ) ) != '' ) : ?> <a href="<?php echo esc_url( get_theme_mod( 'pocketcars_url2' ) );?>" class="social1"> <i class="fa fa-twitter" aria-hidden="true"></i></a>" <?php endif; ?> ?状态不是完全从快照/事件重建的actor的状态吗?

在任何情况下,一旦提供快照,您就无法删除和/或跳过快照。相反,您可以执行以下操作:

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

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

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