Bem-vindo ao Sagaweaw
Sagaweaw é uma biblioteca Java para orquestração de transações distribuídas com compensação automática, retry inteligente e observabilidade em tempo real.
O Problema que Resolvemos
Imagine um restaurante: quando você faz um pedido, não é apenas uma inserção no banco de dados. É um fluxo complexo:
- Validar o pedido
- Reservar os ingredientes
- Preparar na cozinha
- Cobrar o cliente
- Entregar
Se a cozinha falha no passo 3, o que acontece? O pagamento precisa ser estornado, os ingredientes precisam voltar ao estoque. O Sagaweaw orquestra isso automaticamente.
Principais Features
| Feature | Descrição |
|---|---|
| Orquestração Centralizada | Controle total do fluxo com coordenador central |
| Compensação Automática | Rollback em ordem inversa quando algo falha |
| Retry Inteligente | Políticas configuráveis: exponential, fixed, infinite |
| Observability API | Consulte sagas, métricas e dead letters via REST |
| Multi-Banco | PostgreSQL, MySQL ou H2 — sem configuração extra |
| Fluent API | DSL elegante e type-safe |
| MDC Automático | sagaId, sagaName, stepName, attempt em todos os logs |
| Micrometer / Prometheus | Métricas de duração e contadores publicados automaticamente |
| Dashboard Embutido | Lente de debug em tempo real — timelines, dead letters, retry queue |
Quickstart em 30 segundos
1. Adicione a dependência
<dependency>
<groupId>dev.sagaweaw</groupId>
<artifactId>sagaweaw-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
2. Crie sua primeira Saga
@Saga("pix-payment")
public class PixPaymentSaga implements SagaDefinition<PixContext> {
@Override
public SagaFlow<PixContext> define(SagaBuilder<PixContext> saga) {
return saga
.step("validate-dict")
.invoke(this::validateDict)
.compensate(this::invalidateDict)
.step("block-balance")
.invoke(this::blockBalance)
.compensate(this::unblockBalance)
.step("transmit-to-bacen") // PIVOT
.invoke(this::transmitToBacen)
.retry(exponential(3, Duration.ofSeconds(1)))
.build();
}
}
3. Dispare!
@Service
public class PaymentService {
@Autowired
private SagaManager sagaManager;
public void processPayment(PixRequest request) {
PixContext context = new PixContext(request);
sagaManager.start(PixPaymentSaga.class, context);
}
}
Indicadores de Status
O Sagaweaw usa indicadores visuais sutis para comunicar o estado:
| Status | Cor | Descrição |
|---|---|---|
COMPLETED | Verde (#4CAF50) | Step concluído com sucesso |
EXECUTING | Amarelo (#F5A623) | Step em execução (pulsante) |
COMPENSATED | Amarelo (#F5A623) | Step compensado |
FAILED | Vermelho (#E53935) | Step falhou |
Próximos Passos
Comunidade
- GitHub: github.com/amosjuda/sagaweaw
- Issues: Reportar bug ou sugestão
Licença Apache 2.0 — Open source e gratuito para uso comercial.