All Projects → egetman → Jes

egetman / Jes

Licence: apache-2.0
Java Event Store implementation

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Jes

Eventflow.example
DDD+CQRS+Event-sourcing examples using EventFlow following CQRS-ES architecture. It is configured with RabbitMQ, MongoDB(Snapshot store), PostgreSQL(Read store), EventStore(GES). It's targeted to .Net Core 2.2 and include docker compose file.
Stars: ✭ 131 (+309.38%)
Mutual labels:  event-driven, eventsourcing, eventstore, sagas
Eventflow
Async/await first CQRS+ES and DDD framework for .NET
Stars: ✭ 1,932 (+5937.5%)
Mutual labels:  eventsourcing, eventstore, sagas
nestjs-boilerplate-microservice
Nestjs Microservice boilerplate: apply DDD, CQRS, and Event Sourcing within an event driven architecture
Stars: ✭ 270 (+743.75%)
Mutual labels:  eventstore, eventsourcing
Learning.EventStore
A framework for CQRS, Eventsourcing, and messaging that uses Redis pub/sub for messaging and offers event persistence in Redis, SQL Server, or PostgreSQL.
Stars: ✭ 58 (+81.25%)
Mutual labels:  eventstore, event-driven
eventsource-api
Provides an eventsourcing high level API.
Stars: ✭ 12 (-62.5%)
Mutual labels:  eventstore, eventsourcing
workflow
Functional CQRS Eventsourcing Engine
Stars: ✭ 22 (-31.25%)
Mutual labels:  eventstore, eventsourcing
EventStore-Client-NodeJS
A NodeJS client for Event Store
Stars: ✭ 139 (+334.38%)
Mutual labels:  eventstore, eventsourcing
rxeventstore
RxEventStore is a module for persisting and querying data using the Event Sourcing pattern and RxJs.
Stars: ✭ 26 (-18.75%)
Mutual labels:  eventstore, eventsourcing
Event Sourcing Castanha
An Event Sourcing service template with DDD, TDD and SOLID. It has High Cohesion and Loose Coupling, it's a good start for your next Microservice application.
Stars: ✭ 68 (+112.5%)
Mutual labels:  event-driven, eventstore
factcast
This project is archived. A friendly fork can be found at https://github.com/factcast/factcast/
Stars: ✭ 14 (-56.25%)
Mutual labels:  eventstore, eventsourcing
les
Go directly from an event storming to a working API: Event Markdown / Markup validation & NodeJS CQRS/ES application builder.
Stars: ✭ 48 (+50%)
Mutual labels:  eventstore, eventsourcing
Aggregates.net
.NET event sourced domain driven design model via NServiceBus and GetEventStore
Stars: ✭ 261 (+715.63%)
Mutual labels:  eventsourcing, eventstore
Watermill
Building event-driven applications the easy way in Go.
Stars: ✭ 3,504 (+10850%)
Mutual labels:  event-driven, sagas
Goes
Go Event Sourcing made easy
Stars: ✭ 144 (+350%)
Mutual labels:  event-driven, eventsourcing
tardis
Event sourcing toolkit
Stars: ✭ 35 (+9.38%)
Mutual labels:  event-driven, eventsourcing
eventuous
Minimalistic Event Sourcing library for .NET
Stars: ✭ 236 (+637.5%)
Mutual labels:  eventstore, eventsourcing
Sequent
CQRS & event sourcing framework for Ruby
Stars: ✭ 400 (+1150%)
Mutual labels:  eventsourcing, eventstore
Cosmostore
F# Event store for Azure Cosmos DB, Table Storage, Postgres, LiteDB & ServiceStack
Stars: ✭ 154 (+381.25%)
Mutual labels:  eventsourcing, eventstore
ftgogo
FTGOGO - event-driven architecture demonstration application using edat
Stars: ✭ 82 (+156.25%)
Mutual labels:  sagas, event-driven
Jivejdon
Jivejdon is a Domain Driven Design appication with CQRS/ES/Clean/Hexagonal architecture
Stars: ✭ 287 (+796.88%)
Mutual labels:  event-driven, eventsourcing

actions status version code coverage maintainability rating quality gate status apache license maven central

Strongly inspired by:

Jes is a framework to build robust, event-driven microservices in a CQRS & ES paradigm. Jes provides several abstractions, that help to organize the workflow of your application, and hide all the mess.


Getting started

Prerequisites

  1. java 8
  2. build tool like maven or gradle

You can start using Jes by simply adding the following dependency into your pom file:

<dependency>
    <groupId>store.jesframework</groupId>
    <artifactId>jes-core</artifactId>
    <version>${jes.version}</version>
</dependency>

Spring Boot Jes Demo

Building from source

git clone https://github.com/egetman/jes.git
cd jes
mvn install -DskipTests

Overview

There are some typical patterns for mainstream apps for which Jes is perfect:

  1. webapps with lots of user interaction

    webapp-overview

    • a user interacts with the system via queries and commands
    • queries are read-only
    • commands can be accepted or rejected when received by command handlers
    • command handler uses optimistic locking when writing events
    • each projection tails the event store and processed new events if needed
  2. event-driven apps with lots of automatic processing

    ed-app-overview

    • client emits commands to process
    • commands can be accepted or rejected when received by command handlers
    • command handler can use optimistic locking when writing events
    • each saga tails the event store and processed new events if needed: it can trigger compensation action via command, trigger new business logic via command or call an external service
    • sagas are distributed components with proper sync
    • sagas can be stateless or stateful. When stateful - state shared between all instances and all state changes use optimistic locking
    • stateful saga is an event-sourced saga
  3. hybrid apps, which combines 1 & 2 types in some proportion

Features

Feature Subsection Description
event stream corrections what to do if something goes wrong?
 event stream split it can be useful when you need, for example, split event stream for the anonymous one and another, that contains clients personal data
 event stream merge as a split, it can be useful when you want to combine different streams
 event stream deletion optional operation. You can use it when, for example, you need to delete all user-related information, that bounded to a specific stream
 copy-and-replace you can read about it here
versioning how your system will evolve?
 multiple event versions you can live with several concurrent event versions
 upcasting if you want to handle 'always last' version of an event - upcast it (from the 'raw' representation - no intermediate representations, you better know how to transform your data)
 copy-and-transform event store you can read about it here
core
 tails directly event store: no more unreliable event publishing you can watch this talk by Greg Young if you want to ask 'why?'
 strong/weak schema formats (partial) there are several formats you can use for the event store
 pull-based projectors there is no 'control communication channel' - each projection is independent, you can change it how you like
 snapshotting have a long event stream? It's not a problem
flow
 optimistic locking perfect for user-related communication

Components overview

You can find components overview on the related wiki page.

Example configuration

You can find spring-related example configuration on the wiki page.

Contributing

Please refer to the contributing guide.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].