Introduction
What is Eventuous?
Eventuous is a (relatively) lightweight library, which allows building production-grade applications using the Event Sourcing pattern.
The base library Eventuous.Domain has a set of abstractions, following Domain-Driven Design tactical patterns, like Aggregate.
Additional components include:
Persistence using EventStoreDB, PostgreSQL, and Microsoft SQL Server
Real-time subscriptions for EventStoreDB, PostgreSQL, Microsoft SQL Server, RabbitMQ, and Google Pub/Sub
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)
Packages
You can find all the NuGet packages by visiting the Eventuous profile.
- Eventuous
The umbrella package that includes the most used components (Domain, Application, Persistence). Doesn't include subscriptions or any infrastructure support.
- Eventuous.Domain
Library that includes the domain model abstractions like Aggregates.
- Eventuous.Application
Command services base library, including diagnostics and support for dependency injection.
- Eventuous.Persistence
The base library for persistence, including event store and aggregate store abstractions. Also includes support for dependency injection.
- Eventuous.Subscriptions
Subscriptions base library, including diagnostics and support for dependency injection.
- Eventuous.Subscriptions.Polly
Support for retries in event handlers using Polly.
- Eventuous.Producers
Producers base library, including diagnostics and support for dependency injection.
- 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
Gateway component for connecting subscriptions with producers. Typically used for converting domain ( private) events to integration (public) events, as well as for implementing reactive processes.
- 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 Pub/Sub (subscriptions, producers).
- Eventuous.GooglePubSub.CloudRun
Support for Google Pub/Sub trigger for Cloud Run serverless workloads using HTTP.
- 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.Extensions.DependencyInjection
Dependency injection extensions for command services, aggregate factory, etc.
- Eventuous.AspNetCore.Web
HTTP API automation for command services.
Normally, for the domain model project, you would only need to reference Eventuous.Domain package.
Go further
Read about the right way to understand how Eventuous embraces the original idea of Event Sourcing.
Have a look at the samples.