This repository provides tools to implement event sourcing in your application.
It guaranties that:
- Events will be written in the database before being published in Kafka
- Publication in Kafka will be reattempted until it succeeds
It provides capabilities of defining two types of projections:
- "Transactional" projections, that are updated in the same transaction as the events
- "Eventually consistent" projections, updated asynchronously by consuming Kafka
It also allows storing snapshots of the application state, for scenarios that implies lot of events.
These libs are based on :
- Vavr for functional stuff (immutable
List,Either,Future) - Akka stream for reactive streams
- jackson for json
- jooq to build query
- vertx for reactive postgresql database access
- Postgresql and kafka are the in production tested data stores
commons-event: POJOs that represent the stored events. Can be used by consumers to parse events.thoth-core: APIs for event-sourcingthoth-jooq: A jooq simple implementation of thethoth-coreAPIsthoth-jooq-async: A jooq implementation of thethoth-coreAPIs using thejooq-async-apiinterface
See our documentation.
- A single command can't currently modify multiple entities see this issue
./gradlew compileJavadocker-compose -f docker-compose.test.yml up
./gradlew testcd thoth-documentation
sbt generateDoc
