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-core
APIsthoth-jooq-async
: A jooq implementation of thethoth-core
APIs using thejooq-async-api
interface
See our documentation.
- A single command can't currently modify multiple entities see this issue
./gradlew compileJava
docker-compose -f docker-compose.test.yml up
./gradlew test
cd thoth-documentation
sbt generateDoc