Pular para o conteúdo principal

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:

  1. Validar o pedido
  2. Reservar os ingredientes
  3. Preparar na cozinha
  4. Cobrar o cliente
  5. 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

FeatureDescrição
Orquestração CentralizadaControle total do fluxo com coordenador central
Compensação AutomáticaRollback em ordem inversa quando algo falha
Retry InteligentePolíticas configuráveis: exponential, fixed, infinite
Observability APIConsulte sagas, métricas e dead letters via REST
Multi-BancoPostgreSQL, MySQL ou H2 — sem configuração extra
Fluent APIDSL elegante e type-safe
MDC AutomáticosagaId, sagaName, stepName, attempt em todos os logs
Micrometer / PrometheusMétricas de duração e contadores publicados automaticamente
Dashboard EmbutidoLente 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:

StatusCorDescrição
COMPLETEDVerde (#4CAF50)Step concluído com sucesso
EXECUTINGAmarelo (#F5A623)Step em execução (pulsante)
COMPENSATEDAmarelo (#F5A623)Step compensado
FAILEDVermelho (#E53935)Step falhou

Próximos Passos


Comunidade


Licença Apache 2.0 — Open source e gratuito para uso comercial.