🚀 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?

  1. Lightweight: Biblioteca modular e extremamente leve.
  2. Moderno: Desenhado para Java 17 e lógica funcional.
  3. 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!


⬅️ Capítulo Anterior | Próximo Capítulo ➡️