Introduction
What is Eventuous?
Section titled “What is Eventuous?”Eventuous is a (relatively) lightweight library, which allows building production-grade applications using the Event Sourcing pattern.
The base library has a set of abstractions, following Domain-Driven Design tactical patterns, like Aggregate.
Additional components include:
- Aggregate persistence using KurrentDB, PostgreSQL, Microsoft SQL Server, and SQLite
- Real-time subscriptions for KurrentDB, PostgreSQL, Microsoft SQL Server, SQLite, RabbitMQ, and Google PubSub
- Command services and HTTP-based commands
- Extensive observability, including Open Telemetry support
- Integration with ASP.NET Core dependency injection, logging, and Web API
- Producers for KurrentDB, RabbitMQ, Google PubSub, and Apache Kafka
- Read model projections for MongoDB
- Gateway for producing events to other services (Event-Driven Architecture support)
Packages
Section titled “Packages”You can find all the NuGet packages by visiting the Eventuous profile.
| Package | What’s it for |
|---|---|
Eventuous | The umbrella package that includes the most used components |
Eventuous.Domain | Library that includes the domain model abstractions like aggregates |
Eventuous.Persistence | The base library for persistence, including event store and aggregate store abstractions |
Eventuous.Application | Command services base library, including diagnostics and DI support |
Eventuous.Subscriptions | Subscriptions base library, including diagnostics and DI support |
Eventuous.Subscriptions.Polly | Support for retries in event handlers using Polly |
Eventuous.Producers | Producers base library, including diagnostics and DI support |
Eventuous.Diagnostics | Diagnostics base library |
Eventuous.Diagnostics.OpenTelemetry | Diagnostics integration with OpenTelemetry |
Eventuous.Diagnostics.Logging | Eventuous internal logs adapter for ASP.NET Core logging |
Eventuous.Gateway | Eventuous gateway for connecting subscriptions with producers |
Eventuous.KurrentDB | Support for KurrentDB (event store, subscriptions, producers) |
Eventuous.Postgresql | Support for PostgreSQL (event store, subscriptions, producers) |
Eventuous.SqlServer | Support for Microsoft SQL Server (event store, subscriptions, producers) |
Eventuous.Sqlite | Support for SQLite (event store, subscriptions, projections) |
Eventuous.RabbitMq | Support for RabbitMQ (subscriptions, producers) |
Eventuous.GooglePubSub | Support for Google PubSub (subscriptions, producers) |
Eventuous.Kafka | Support for Apache Kafka (producers) |
Eventuous.ElasticSearch | Support for Elasticsearch (producers, event store for archive purposes) |
Eventuous.Projections.MongoDB | Projections support for MongoDB |
Eventuous.AspNetCore | DI extensions for app services, aggregate factory, etc. |
Eventuous.AspNetCore.Web | HTTP API automation for app services |
Normally, for the domain model project, you would only need to reference Eventuous.Domain package.
Go further - WIP
Section titled “Go further - WIP”Read about the right way to understand how Eventuous embraces the original idea of Event Sourcing.
You can have a look at the sample project in a separate repository.