Versions Compared

Key

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

...

Code Block
languagejava
themeEmacs
final case class SnapshotMetadata(persistenceId: String, sequenceNr: Long, timestamp: Long = 0L)


@Component
@Scope("prototype")
public class SnapShotActor extends AbstractPersistentActor {
	
	private final LoggingAdapter log = Logging.getLogger(getContext().system(), "AbstractPersistentActor");	  		
	private Object state;
	private int snapShotInterval = 5;
	
    @Override
    public String persistenceId() { return "ExamplePersistentActor-id-1"; }
    
    @Override public Receive createReceiveRecover() {
	  return receiveBuilder().
	    = 1000;

match(SnapshotOffer.class, s -> {
	      state = s.snapshot();	//상태복원
	      // ...
	    }).
	    match(String.class, s -> {/* ...*/}).build();
	}
	 
	// 스냅샷을 지원하는 메시지 정의
	@Override public Receive createReceive() {
	  return receiveBuilder().
	    match(SaveSnapshotSuccess.class, ss -> {
	      SnapshotMetadata metadata = ss.metadata();
	      // ...
	    }).
	    match(SaveSnapshotFailure.class, sf -> {
	      SnapshotMetadata metadata = sf.metadata();
	      // ...
	    }).
	    matchEquals("print", s -> System.out.println(state) ).	//마지막 상태확인	    
	    match(String.class, cmd -> {
	      persist( "evt-" + cmd, e -> {
	log.info("EventFired:"+cmd);	 
            state  updateState(e);
= "MyState" + cmd;   	
	        if (lastSequenceNr() % snapShotInterval == 0 && lastSequenceNr() != 0)
		          saveSnapshot(state);
//이벤트가 5회 발생할때마다 스냅샷을 찍음
	        	  log.info("SaveSnapShot");
                  
		      }    saveSnapshot(state);
	    })	    
	    .build();
	}
}

스냅샷 저장에 필요한 메타정의(SnapshotMetadata) 후 자신이 원하는 타이밍에

카메라 셔터(saveSnapshot) 를 누르기만 하면됩니다.

...

마지막 상태를 복원(SnapshotOffer)할수도 있고,

각 시간대별 스냅샷은 고유 아이디가 존재함으로

특정 스냅샷(SnapshotSelectionCriteria)을 복원할수도 있습니다.


스냅샷 테스트

Code Block
languagejava
themeEmacs




스냅샷 시도에따른 반응 메시지

MethodSuccessFailure message
saveSnapshot(Any)SaveSnapshotSuccessSaveSnapshotFailure
deleteSnapshot(Long)DeleteSnapshotSuccessDeleteSnapshotFailure
deleteSnapshots(SnapshotSelectionCriteria)DeleteSnapshotsSuccessDeleteSnapshotsFailure

...