🚀 9.5 Resiliência com Resilience4j
Na nuvem, a pergunta não é se um serviço vai falhar, mas quando. Na Engenharia de Elite, utilizamos o Circuit Breaker (Resilience4j) para garantir que uma falha no “Serviço de Cozinha” não derrube todo o sistema Green Dog Delivery.
O Conceito do Disjuntor
Imagine o sistema elétrico de sua casa: se houver um curto-circuito em uma tomada, o disjuntor cai para proteger o resto da instalação. O Resilience4j faz exatamente isso com seu software.
stateDiagram-v2 [*] --> CLOSED: Funcionamento Normal CLOSED --> OPEN: Falhas detectadas (Threshold atingido) OPEN --> HALF_OPEN: Tempo de espera finalizado HALF_OPEN --> CLOSED: Teste de fumaça OK HALF_OPEN --> OPEN: Falha persiste
Implementação Premium (Fallback)
Utilizamos a anotação @CircuitBreaker para proteger nossos métodos e definir um plano de contingência (Fallback).
@CircuitBreaker(name = "greendog", fallbackMethod = "fallbackItens")
public List<Item> buscarItensDoCardapio() {
return restTemplate.getForObject("lb://cozinha-service/itens", List.class);
}
// Método acionado quando o serviço de cozinha está fora do ar
private List<Item> fallbackItens(Exception e) {
System.out.println("⚠️ [Green Dog] Cozinha offline. Retornando itens em cache.");
return Arrays.asList(new Item("Cardápio Offline / Cache", 0.0));
}
Por que Resilience4j?
- Lightweight: Biblioteca modular e extremamente leve.
- Moderno: Desenhado para Java 17 e lógica funcional.
- Observabilidade: Integra-se perfeitamente ao Micrometer para exibir métricas no Grafana.
CAUTION
Degradação Elegante: Na Engenharia de Elite, é melhor mostrar um cardápio reduzido ou uma mensagem amigável do que deixar o cliente esperando um “Timeout” infinito de 30 segundos.
No próximo capítulo, faremos o resumo final desta jornada pela nuvem!