How sapkalsachin2011/sagapattern works
This is an orchestrated order-processing Saga: a client submits and polls an order; the API persists it and publishes an event; the Saga coordinates inventory reservation and payment, then confirms the order or compensates by releasing inventory. Workers keep service-owned state, while the API and notification worker consume status changes. The README documents the principal message flow and scenarios; sampled source confirms API submission, inventory reservation, and service persistence setup, but not every consumer or the state machine implementation.
Main entry points: OrderSagaStateMachine.cs Order Saga · Messages.cs Saga messages · Program.cs Order HTTP API · ReserveInventoryConsumer.cs Inventory worker
Components 13
Order API
- Order HTTP API
src/Order.Api/Program.cs - Order database
src/Order.Api/Persistence/OrderDbContext.cs
Saga orchestration
- Order Saga
src/Saga.Orchestrator/OrderSagaStateMachine.cs - Saga database
src/Saga.Orchestrator/Persistence/SagaDbContext.cs
Domain workers
- Inventory worker
src/Inventory.Worker/Consumers/ReserveInventoryConsumer.cs - Inventory database
src/Inventory.Worker/Persistence/InventoryDbContext.cs - Payment worker
src/Payment.Worker/Consumers/ChargePaymentConsumer.cs - Payment database
src/Payment.Worker/Persistence/PaymentDbContext.cs - Notification worker
src/Notification.Worker/Consumers/OrderStatusChangedConsumer.cs - Notification database
src/Notification.Worker/Persistence/NotificationDbContext.cs
Messaging contracts
- Saga messages
src/Saga.Contracts/Messages.cs
Other components
- Client
- RabbitMQ
Connections 23
- Client → Order HTTP API: submits / polls
- Order HTTP API → Order database: reads and writes
- Order HTTP API → RabbitMQ: publishes order
- RabbitMQ → Order Saga: delivers order
- Order Saga → Saga database: persists state
- Order Saga → RabbitMQ: sends commands
- RabbitMQ → Inventory worker: delivers inventory command
- Inventory worker → Inventory database: reads and updates
- Inventory worker → RabbitMQ: publishes result
- RabbitMQ → Order Saga: delivers inventory result
- RabbitMQ → Payment worker: delivers charge command
- Payment worker → Payment database: persists payment
- Payment worker → RabbitMQ: publishes result
- RabbitMQ → Order Saga: delivers payment result
- Order Saga → RabbitMQ: publishes status
- RabbitMQ → Order HTTP API: delivers status
- RabbitMQ → Notification worker: delivers status
- Notification worker → Notification database: records status
- Saga messages → Order HTTP API: defines messages
- Saga messages → Order Saga: defines messages
- Saga messages → Inventory worker: defines messages
- Saga messages → Payment worker: defines messages
- Saga messages → Notification worker: defines messages