Este repositorio demonstra um fluxo de orquestracao de Saga para processamento de pedido, com foco em:
- execucao sequencial de comandos
- controle de estado da saga
- rollback (compensacao) em caso de falha
- estrutura de projeto organizada por responsabilidade
O projeto simula um processo de pedido com quatro etapas:
- Criar pedido
- Reservar estoque
- Processar pagamento
- Enviar confirmacao
Se alguma etapa falhar, o orquestrador executa compensacoes em ordem reversa para desfazer as etapas ja concluidas.
.
|- README.md
`- Orchestrator/
|- Orchestrator.csproj
|- Orchestrator.sln
`- src/
|- App/
| `- Program.cs
|- Application/
| `- Commands/
| |- CreateOrderCommand.cs
| |- ReserveStockCommand.cs
| |- ProcessPaymentCommand.cs
| `- SendConfirmationCommand.cs
|- Contracts/
| `- ISagaCommand.cs
|- Domain/
| |- Models/
| | `- OrderContext.cs
| `- State/
| `- SagaState.cs
`- Orchestration/
|- OrderSagaOrchestrator.cs
`- SagaStateMachine.cs
App: ponto de entrada da aplicacao e cenarios de execucao.Application/Commands: etapas de negocio da saga, cada uma comExecuteAsynceCompensateAsync.Contracts: contratos comuns (interface de comando da saga).Domain: modelos e estados de dominio usados na orquestracao.Orchestration: regras de coordenacao do fluxo e maquina de estados.
Documentacao detalhada:
docs/ARCHITECTURE.md: detalhes de componentes e fluxo da saga.docs/EXTENSIBILITY.md: como evoluir o projeto com novos comandos.
Pre-requisitos:
- .NET SDK 10.0 (ou versao compativel com
net10.0)
Comandos a partir da raiz do repositorio:
dotnet restore Orchestrator/Orchestrator.csproj
dotnet run --project Orchestrator/Orchestrator.csprojO Program.cs executa dois cenarios:
- cenario de sucesso
- cenario de falha em estoque, acionando compensacao
- Em sucesso: estado da saga vai de
Pending->Running->Done. - Em falha: estado da saga vai de
Pending->Running->Compensating->Failed. - As compensacoes ocorrem em ordem reversa da execucao dos comandos.
- Orquestracao explicita em uma unica classe (
OrderSagaOrchestrator). - Rastreio de comandos executados com pilha para rollback reverso.
- Validacao de transicoes com
SagaStateMachinepara evitar estados invalidos. - Contexto compartilhado (
OrderContext) para transportar dados entre etapas.
- adicionar logs estruturados (ex.:
ILogger) - criar testes unitarios para comandos, maquina de estados e orquestrador
- adicionar persistencia de estado da saga para cenarios reais
- trocar simulacoes por integracoes reais (estoque, pagamento, notificacao)