Resiliência & Consistência
Idempotência e Circuit Breaker fazem parte do core do Orquestraio — não são opcionais. Esta página documenta ambos os mecanismos.
Idempotência
O campo idempotencyKey garante que a mesma transação nunca seja processada duas vezes, mesmo com falhas de rede e múltiplas tentativas.
Como Funciona
Quando uma requisição chega com um idempotencyKey:
- O Orquestraio verifica no Redis se essa chave já foi processada
- Se não existe, processa normalmente e armazena o resultado com TTL de 24h
- Se já existe, retorna o resultado cacheado sem chamar o gateway novamente
Circuit Breaker
Cada gateway tem circuit breaker independente via Resilience4j. Quando a taxa de falha ultrapassa o threshold, o gateway é isolado temporariamente.
Configuração por Gateway
| Gateway | Janela | Threshold | Tempo aberto | Half-open |
|---|---|---|---|---|
STRIPE | 10 req | 50% | 20s | 3 calls |
MERCADO_PAGO | 10 req | 50% | 15s | 3 calls |
PAYPAL | 10 req | 50% | 20s | 3 calls |
Estados do Circuit Breaker
CLOSED — Gateway funcionando normalmente. Todas as requisições são enviadas.
OPEN — Gateway em falha. Requisições retornam erro imediatamente sem chamar o gateway.
HALF_OPEN — Gateway em teste. Permite 3 chamadas para verificar se voltou ao normal.
Exemplo de Cenário Real
- 10 requisições enviadas para o Stripe
- 6 delas falham (timeout, 500, etc.) — 60% de falha
- Circuit Breaker muda para OPEN
- Próximas requisições retornam erro imediatamente por 20 segundos
- Após 20s, muda para HALF_OPEN e permite 3 tentativas
- Se as 3 tentativas forem bem-sucedidas, volta para CLOSED
Os estados do Circuit Breaker são logados em execution_history e podem ser monitorados via métricas (Prometheus/Grafana em v0.6).