Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/maif/thoth
Event sourcing in java with vavr, akka stream and vertx reactive PG driver
https://github.com/maif/thoth
akka-streams event-sourcing functional-programming java kafka postgresql
Last synced: about 1 month ago
JSON representation
Event sourcing in java with vavr, akka stream and vertx reactive PG driver
- Host: GitHub
- URL: https://github.com/maif/thoth
- Owner: MAIF
- License: apache-2.0
- Created: 2020-09-24T14:05:45.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-06T08:19:58.000Z (6 months ago)
- Last Synced: 2024-12-05T09:34:42.921Z (about 2 months ago)
- Topics: akka-streams, event-sourcing, functional-programming, java, kafka, postgresql
- Language: Java
- Homepage: https://MAIF.github.io/thoth/
- Size: 2.19 MB
- Stars: 32
- Watchers: 10
- Forks: 9
- Open Issues: 15
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Event sourcing [![github-action-badge][]][github-action] [![jar-badge][]][jar]
[github-action]: https://github.com/MAIF/thoth/actions?query=workflow%3ABuild
[github-action-badge]: https://github.com/MAIF/thoth/workflows/Build/badge.svg?branch=master
[jar]: https://maven-badges.herokuapp.com/maven-central/fr.maif/thoth-core_2.13
[jar-badge]: https://maven-badges.herokuapp.com/maven-central/fr.maif/thoth-core_2.13/badge.svg
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 succeedsIt 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![](thoth-documentation/src/main/paradox/img/thoth_event_sourcing.jpg)
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-api`interface## Documentation
See our [documentation](https://maif.github.io/thoth/manual/).
## Limits
* A single command can't currently modify multiple entities [see this issue](https://github.com/MAIF/thoth/issues/4)
## Development
### Compile / Test
```bash
./gradlew compileJava
``````bash
docker-compose -f docker-compose.test.yml up
./gradlew test
```### Generate the documentation
```bash
cd thoth-documentation
sbt generateDoc
```