Thoth
Event sourcing in java with vavr, akka stream and vertx reactive PG driver
Install / Use
/learn @MAIF/ThothREADME
Event sourcing

<p align="center">
<img src="thoth.png" alt="thoth" width="300"/>
</p>
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
