thoth
thoth copied to clipboard
Event sourcing in java with vavr, akka stream and vertx reactive PG driver
Event sourcing

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
Modules
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
Documentation
See our documentation.
Limits
- A single command can't currently modify multiple entities see this issue
Development
Compile / Test
./gradlew compileJava
docker-compose -f docker-compose.test.yml up
./gradlew test
Generate the documentation
cd thoth-documentation
sbt generateDoc