sealed trait Event
final case class NoteAdded(text: String) extends Event
sealed trait Command
final case class AddNote(text: String) extends Command
def noteBehaviour(id: String) = EventSourcedBehavior[Command, Event, Unit](
persistenceId = PersistenceId.of("notes", id),
emptyState = (),
commandHandler = {
case (state, AddNote(text)) => Effect.persist(NoteAdded(text)).thenRun { s =>
logger.info("{}: Added note: [{}]",id, text)
}
},
eventHandler = {
case _ => ()
}
).withTagger(_ => Set("notes"))
val guardian = Behaviors.setup[String] { ctx =>
Behaviors.withTimers { timerFactory =>
val note1 = ctx.spawn(noteBehaviour("1"), "1")
timerFactory.startTimerAtFixedRate(UUID.randomUUID().toString, 5 seconds)
Behaviors.receive[String] { (ctx, str) =>
note1 ! AddNote(str)
Behaviors.same[String]
}
}
}
implicit val system = ActorSystem[String](guardian, "TestSystem", config)
implicit val ec = system.executionContext
val readJournal: DynamoDBReadJournal =
PersistenceQuery(system).readJournalFor[DynamoDBReadJournal](DynamoDBReadJournal.Identifier)
readJournal.eventsByTag("notes", Offset.noOffset)
.runForeach(e => logger.info("Event: [{}]", e))
2021-06-04 11:14:07,895 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:12,723 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:13,906 [INFO ] | Main$: Event: [EventEnvelope(Sequence(1),notes|1,1,NoteAdded(dce35195-6e36-41ed-8eaf-58f8ba7e40b5),0,None)] |
2021-06-04 11:14:13,907 [INFO ] | Main$: Event: [EventEnvelope(Sequence(2),notes|1,2,NoteAdded(dce35195-6e36-41ed-8eaf-58f8ba7e40b5),0,None)] |
2021-06-04 11:14:17,759 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:22,718 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:27,738 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:32,726 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:37,736 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:42,722 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:47,731 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1
2021-06-04 11:14:52,735 [INFO ] | Main$: 1: Added note: [dce35195-6e36-41ed-8eaf-58f8ba7e40b5] | persistencePhase=persist-evt, akkaAddress=akka://TestSystem, akkaSource=akka://TestSystem/user/1, sourceActorSystem=TestSystem, persistenceId=notes|1