📊 Capítulo 18: Resiliência com Resilience4j
Especialização Backend com Java 21 & Spring Boot 3
🗺️ A Máquina de Estados do Circuit Breaker
stateDiagram-v2
[*] --> Closed: Operação Normal (Requisições fluem)
Closed --> Open: Taxa de Falhas > 50% (Circuito Abre / Rejeição Imediata com Fallback)
Open --> HalfOpen: Após Tempo de Espera (ex. 10s)
HalfOpen --> Closed: Testes com Sucesso (Circuito Fecha)
HalfOpen --> Open: Novo Erro Detectado (Circuito Reabre)
classDef stClosed fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
class Closed stClosed
classDef stOpen fill:#ffebee,stroke:#d32f2f,stroke-width:2px
class Open stOpen
classDef stHalfOpen fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
class HalfOpen stHalfOpen
🎯 Slide 1: Por Que Precisamos de Resiliência?
-
Falhas em Cascata: Se o serviço de pagamentos ficar lento, ele esgota o pool de threads do serviço de pedidos, derrubando toda a arquitetura.
- Fail-Fast: É melhor falhar imediatamente com um erro controlado ou resposta degradada do que travar a aplicação por 60 segundos.
🎯 Slide 2: Anotações Declarativas do Resilience4j
@Service
public class PagamentoService {
@CircuitBreaker(name = "gatewayPagamento", fallbackMethod = "pagamentoFallback")
@Retry(name = "gatewayPagamento")
@RateLimiter(name = "gatewayPagamento")
public PagamentoResponse processar(PagamentoRequest req) {
return gatewayExternoClient.cobrar(req);
}
// Método de Fallback executado quando o circuito abre ou dá timeout
public PagamentoResponse pagamentoFallback(PagamentoRequest req, Throwable t) {
log.warn("Gateway indisponível! Enfileirando cobrança assíncrona: {}", t.getMessage());
return new PagamentoResponse("AGENDADO_OFFLINE", req.valor());
}
}
🎯 Slide 3: Os 5 Padrões Fundamentais do Resilience4j
- Circuit Breaker: Corta chamadas a serviços com falhas repetidas.
- Retry: Tenta novamente com Exponential Backoff e Jitter.
- RateLimiter: Limita a taxa máxima de chamadas por segundo.
- TimeLimiter: Cancela operações que excedem o tempo limite.
- Bulkhead: Isola pools de threads para que a lentidão de um cliente não afete os demais.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim