Page History
...
Event Driven은 Eventsourcing을 하기 위한 선행과제이며 이것만 으로 큰 주제 이기 때문에 아래링크를 참고합니다포함하여 다양한 자료를 보시는것을 권장합니다.
참고링크:
EventSourcing
메시지설계
Code Block | ||||
---|---|---|---|---|
| ||||
class Cmd implements Serializable { private static final long serialVersionUID = 1L; private final String data; public Cmd(String data) { this.data = data; } public String getData() { return data; } } class Evt implements Serializable { private static final long serialVersionUID = 1L; private final String data; public Evt(String data) { this.data = data; } public String getData() { return data; } } class ExampleState implements Serializable { private static final long serialVersionUID = 1L; private final ArrayList<String> events; public ExampleState() { this(new ArrayList<>()); } public ExampleState(ArrayList<String> events) { this.events = events; } public ExampleState copy() { return new ExampleState(new ArrayList<>(events)); } public void update(Evt evt) { events.add(evt.getData()); } public int size() { return events.size(); } @Override public String toString() { return events.toString(); } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
protected void persistenceEventSrc(ActorSystem system,SpringExtension ext) { new TestKit(system) {{ ActorRef probe = getRef(); Props examplePersistentActor = ext.props("examplePersistentActor"); System.out.println("eventActor 액터생성"); ActorRef eventActor = system.actorOf(examplePersistentActor, "eventActor"); System.out.println("event 생성"); eventActor.tell(new Cmd("test1"), ActorRef.noSender()); eventActor.tell(new Cmd("test2"), ActorRef.noSender()); eventActor.tell(new Cmd("test3"), ActorRef.noSender()); eventActor.tell(new Cmd("test4"), ActorRef.noSender()); System.out.println("event 재생"); eventActor.tell( "print" , ActorRef.noSender()); expectNoMessage(java.time.Duration.ofSeconds(1)); System.out.println("eventActor 종료또는 비정상종료"); eventActor.tell( akka.actor.PoisonPill.getInstance() , ActorRef.noSender()); expectNoMessage(java.time.Duration.ofSeconds(1)); System.out.println("eventActor 재생성"); ActorRef eventActor2 = system.actorOf(examplePersistentActor, "eventActor"); System.out.println("event 복원확인"); eventActor2.tell( "print" , ActorRef.noSender()); expectNoMessage(java.time.Duration.ofSeconds(1)); }}; } |
이벤트 소싱의 Flow를 간단하게 확인할수 있는 TestCode입니다.
특정한 기능 목적을 두지는 않았지만, 장바구니에 활용될수 있으며 예를 들면 장바구니를 담고뺀 순서를 알수 있으며
...
Expand | ||
---|---|---|
| ||
[INFO] [06/11/2018 10:37:26.066] [main] [akka.persistence.Persistence(akka://AkkaTestApp)] Auto-starting journal plugin `akka.persistence.journal.inmem` |
이벤트 소싱의 Flow를 간단하게 확인할수 있는 TestCode입니다. 특정한 기능 목적을 두지는 않았으며
이 코드는 장바구니에 그대로 활용될수 있으며, 장바구니에 상품을 담고뺀 순서를 알수 있으며( 장바구니의 이벤트를 기록및 재생)
마지막 장바구니에 담긴 물건의 최종상태도 알수가 있습니다.( 이것을 어떻게 서비스할지는, 이벤트를 소비하는 서비스의 역활 )
필요에 따라 분산된 저장소에 확장이 가능합니다.
참고자료:
- https://doc.akka.io/docs/akka/current/persistence.html#event-sourcing
- https://doc.akka.io/docs/akka/current/cluster-sharding.html