Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagec#
themeEmacs
linenumberstrue
 public class MySnapShotActor : UntypedPersistentActor
{
  private ILoggingAdapter log = Context.GetLogger();
  public override string PersistenceId => "my-stable-persistence-id";
  private const int SnapShotInterval = 5;
  private object state = new object();

  //복구수 전략을 선택합니다. (최근 50개)
  public override Recovery Recovery => new Recovery(fromSnapshot: new SnapshotSelectionCriteria(minSequenceNr:0, maxSequenceNr: 1050, maxTimeStamp: DateTime.UtcNow));
  //public override Recovery Recovery => new Recovery(fromSnapshot: SnapshotSelectionCriteria.None);

  protected override void OnRecover(object message)
  {
      // handle recovery here
      if (message is SnapshotOffer offeredSnapshot)
      {
          log.Debug("이전 스냅샷 복구");
          state = offeredSnapshot.Snapshot;
      }
      else if (message is RecoveryCompleted)
      {
          log.Debug("스냅샷복구완료:");
      }
      else
      {
          // event
          log.Debug("스냅샷e:" + message);
      }
  }

  protected override void OnCommand(object message)
  {
      if (message is SaveSnapshotSuccess s)
      {
          log.Debug("스냅샷 성공");
      }
      else if (message is SaveSnapshotFailure f)
      {
          log.Debug("스냅샷 실패");
      }
      else if (message is string cmd)
      {
          log.Debug("cmd:" + cmd);
          Persist($"evt-{cmd}", e =>
          {
              UpdateState(e);
              if (LastSequenceNr % SnapShotInterval == 0 && LastSequenceNr != 0)
              {
                  log.Debug("스냅샷 시도");
                  SaveSnapshot(state);
              }
          });
      }
  }

  private void UpdateState(string evt)
  {
      state = evt;
  }
}

...