A production-oriented distributed event processing platform built with .NET 10, Redis Streams, and PostgreSQL.
This release covers:
- Idempotent ingestion
- Async background processing
- Retry with exponential backoff
- Event lifecycle tracking
- Correlation and traceability fields
- Baseline observability signals
- EventIngestion.Api
- Receives events via HTTP
- Enforces idempotency
- Persists event envelope and outbox row atomically in PostgreSQL
- OutboxPublisherService (hosted inside
EventIngestion.Api)- Polls unpublished outbox rows
- Publishes to Redis Streams and transitions event from
RECEIVED → QUEUED
- EventWorker
- Consumes from Redis Streams via Consumer Groups (
XREADGROUP) - Reclaims stale PEL messages via
XAUTOCLAIM(withXPENDING+XCLAIMfallback for older Redis) - Processes events asynchronously
- Applies retry policies
- Updates event lifecycle state
- Acknowledges messages after durable status transition
- Consumes from Redis Streams via Consumer Groups (
- PostgreSQL
- Source of truth
- Stores event envelope + status transitions
- Redis Streams
- Transport layer
- At-least-once delivery
RECEIVED -> QUEUED -> PROCESSING -> SUCCEEDED
On retryable failure:
PROCESSING -> FAILED_RETRYABLE -> QUEUED (after delay)
On terminal failure:
PROCESSING -> FAILED_TERMINAL
- DLQ workflow is not implemented yet.
- Manual intervention is required for
FAILED_TERMINALevents.
- Complete operational runbooks.
- Post-release reliability hardening and platform improvements.
docker compose -f deployments/docker-compose.yml up -dPowerShell:
$env:EVENTPLATFORM_DB="Host=localhost;Port=54320;Database=event_platform;Username=event_platform;Password=event_platform"
dotnet run --project src/EventPlatform.DbMigratordotnet run --project src/EventIngestion.Apidotnet run --project src/EventWorker- .NET 10
- ASP.NET Core (Minimal APIs)
- Redis Streams
- PostgreSQL
- Dapper
- BackgroundService
- Clean Architecture
See /docs folder for:
- Architecture decisions (ADR)
- Event contract
- Processing semantics
- Retry strategy
- Failure scenarios
- Observability design
- Unit tests
- Integration tests with Testcontainers
- End-to-end ingestion -> processing flow
- Dead Letter Queue (DLQ)
- Expanded metrics and dashboards
- Full operational runbooks
MIT