Skip to content

MAIF/thoth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

11b9eb6 · Mar 3, 2025
Aug 2, 2024
Nov 8, 2022
Jul 15, 2024
Jan 29, 2024
Sep 27, 2022
Jul 15, 2024
Nov 8, 2022
Mar 3, 2025
Mar 3, 2025
Mar 3, 2025
Jan 29, 2024
Jul 15, 2024
Mar 3, 2025
Jul 15, 2024
May 15, 2024
Dec 8, 2023
Jul 15, 2024
Sep 27, 2022
Jan 29, 2024
Nov 17, 2023
Sep 24, 2020
Sep 24, 2020
Jul 15, 2024
Sep 27, 2022
Mar 16, 2021
Nov 27, 2020
Aug 6, 2024
Sep 27, 2022
Sep 27, 2022
Mar 23, 2021
Nov 8, 2022
Sep 29, 2022
Dec 15, 2020
Dec 15, 2020
Dec 15, 2020

Repository files navigation

Event sourcing github-action-badge jar-badge

thoth

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-sourcing
  • thoth-jooq: A jooq simple implementation of the thoth-core APIs
  • thoth-jooq-async: A jooq implementation of the thoth-core APIs using the jooq-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