Introduction
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 EventStoreDB, PostgreSQL, and Microsoft SQL Server
- Real-time subscriptions for EventStoreDB, PostgreSQL, Microsoft SQL Server, 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 EventStoreDB, RabbitMQ, Google PubSub, and Apache Kafka
- Read model projections for MongoDB
- Gateway for producing events to other services (Event-Driven Architecture support)
Eventuous is under active development and doesn't follow semantic versioning. We introduce changes often, according to immediate needs of its production users. The API hasn't reached a stable state and can change at any time. A patch version update would normally not change the API, but the minor version cloud.
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.EventStore | Support for EventStoreDB (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.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
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.