0Pricing
API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) · Leçon

Disjoncteurs avec Resilience4j

Intégrez Resilience4j pour mettre en œuvre le modèle du disjoncteur et empêcher les défaillances en cascade dans vos microservices.

Disjoncteurs avec Resilience4j est une leçon API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway), et ta progression se synchronise sur le web et l'application CoddyKit. Le cours API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Microservices & Resilience

In a microservices architecture, many small services work together. While powerful, this interconnectedness can be a weakness.

If one service becomes slow or unresponsive, requests can pile up, leading to other services waiting, which then slows them down too. This is called a cascading failure and can bring down your entire system!

What's a Circuit Breaker?

Think of an electrical circuit breaker in your home. If there's an overload, it 'trips' to prevent damage.

In software, a Circuit Breaker pattern does the same. It stops continuous calls to a failing service, giving that service time to recover and preventing the failure from spreading.

Instead of hammering a broken service, the circuit breaker 'fails fast' by immediately returning an error or a fallback response.

Introducing Resilience4j

Resilience4j is a lightweight, fault-tolerance library inspired by Netflix Hystrix. It's designed for functional programming and integrates seamlessly with Spring Boot.

It provides various resilience patterns, including Circuit Breaker, Rate Limiter, Retry, and Bulkhead, helping you build more robust microservices.

The Three States of a Circuit

A Circuit Breaker operates in three main states:

  • CLOSED: This is the normal state. Requests pass through to the protected service. If failures exceed a configured threshold, it transitions to OPEN.
  • OPEN: No requests are allowed through. All calls fail immediately. After a configured wait duration, it transitions to HALF_OPEN.
  • HALF_OPEN: A limited number of test requests are allowed. If these succeed, the circuit CLOSEs. If they fail, it re-OPENs.

Setting Up Resilience4j

To use Resilience4j with Spring Boot, you need to add the necessary dependencies to your pom.xml (for Maven) or build.gradle (for Gradle).

These dependencies provide the core Circuit Breaker functionality and Spring Boot integration.

<!-- Maven (pom.xml) -->
<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot2</artifactId>
    <version>1.7.1</version>
</dependency>
<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-circuitbreaker</artifactId>
    <version>1.7.1</version>
</dependency>

Basic Circuit Breaker Config

You configure Circuit Breakers in your application.yml or application.properties. Here's a basic example:

  • failureRateThreshold: Percentage of failures to open the circuit.
  • waitDurationInOpenState: How long the circuit stays open.
  • slidingWindowSize: Number of calls to consider for failure rate.
resilience4j.circuitbreaker:
  instances:
    myBackendService:
      failureRateThreshold: 50
      waitDurationInOpenState: 5s
      slidingWindowType: COUNT_BASED
      slidingWindowSize: 10

Protecting a Service Call

With Spring Boot, you can easily apply a Circuit Breaker using the @CircuitBreaker annotation on the method you want to protect.

Specify the name of your configured circuit breaker instance and an optional fallbackMethod.

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;

@Service
public class MyExternalService {

    @CircuitBreaker(name = "myBackendService", fallbackMethod = "reliableFallback")
    public String callReliableApi() {
        // Simulate an API call that might fail
        if (Math.random() < 0.7) {
            throw new RuntimeException("API call failed!");
        }
        return "Data from API";
    }

    public String reliableFallback(Throwable t) {
        return "Fallback: Service is currently unavailable.";
    }
}

Hands-on with Resilience4j

Let's see a Circuit Breaker in action! This runnable example simulates calls to a service that frequently fails, demonstrating the state transitions.

Observe how the circuit opens after several failures and then tries to half-open after a delay.

import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.vavr.CheckedFunction0;
import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        CircuitBreakerConfig config = CircuitBreakerConfig.custom()
            .failureRateThreshold(50) // 50% failure rate to open
            .waitDurationInOpenState(Duration.ofSeconds(2))
            .slidingWindowSize(10)
            .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
            .build();

        CircuitBreaker circuitBreaker = CircuitBreaker.of("myTestService", config);

        circuitBreaker.getEventPublisher()
            .onStateTransition(event -> System.out.println("\nCircuit Breaker State Transition: " + event.getOldState() + " -> " + event.getNewState() + "\n"));

        System.out.println("Simulating 20 service calls...");
        for (int i = 1; i <= 20; i++) {
            try {
                String result = circuitBreaker.executeCheckedSupplier(
                    (CheckedFunction0<String>) () -> {
                        if (Math.random() < 0.6) { // Simulate 60% failure
                            System.out.println("  Call " + i + ": Service failed!");
                            throw new RuntimeException("Simulated Service Error");
                        }
                        System.out.println("  Call " + i + ": Service succeeded.");
                        return "Data from Service";
                    });
                System.out.println("  -> Result: " + result);
            } catch (Throwable t) {
                System.out.println("  -> Result: Fallback/Circuit OPEN! Message: " + t.getMessage());
            }
            try {
                Thread.sleep(200); // Pause to observe behavior
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
        System.out.println("\nSimulation complete. Final state: " + circuitBreaker.getState());
    }
}

Handling Fallbacks Gracefully

The fallbackMethod is crucial. When the protected method fails (either due to an exception or the circuit being OPEN), this method is invoked instead.

It allows you to provide a default response, cached data, or a simplified experience to the user, preventing a complete failure of the user's request.

Always ensure your fallback method has the same return type and accepts a Throwable as its last argument.

Key Configuration Parameters

Understanding these parameters helps you fine-tune your Circuit Breaker:

  • failureRateThreshold: The percentage of failures that will cause the circuit to open.
  • waitDurationInOpenState: The duration the circuit will stay in the OPEN state before transitioning to HALF_OPEN.
  • slidingWindowSize: The number of calls that are recorded and used to calculate the failure rate.
  • slidingWindowType: Can be COUNT_BASED (a fixed number of calls) or TIME_BASED (calls within a certain time window).

Quick Check: Circuit States

Which of the following conditions might cause a Circuit Breaker to transition from CLOSED to OPEN state in Resilience4j?

Recap: Guarding Your Services

You've learned that Circuit Breakers are an essential pattern for building resilient microservices. They prevent cascading failures by 'tripping' when a service is unhealthy, giving it time to recover.

Resilience4j provides a lightweight and powerful way to implement these patterns in your Spring Cloud Gateway or Spring Boot applications. You now understand its states, basic configuration, and how to apply it to protect your services.

Questions Fréquemment Posées

La leçon « Disjoncteurs avec Resilience4j » est-elle gratuite ?

Oui — le texte complet de « Disjoncteurs avec Resilience4j » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway), passe à CoddyKit PRO. Le cours API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Disjoncteurs avec Resilience4j » ?

Intégrez Resilience4j pour mettre en œuvre le modèle du disjoncteur et empêcher les défaillances en cascade dans vos microservices. Tu pratiques API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ?

Aucune expérience préalable n'est requise. API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Disjoncteurs avec Resilience4j » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) ?

Oui. Chaque leçon API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway) inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Disjoncteurs avec Resilience4j
  2. Configuration des nouvelles tentatives et des délais d’attente
  3. Gestion des erreurs et mécanismes de secours
  4. Cloisons et limitation du débit pour la résilience
← Retour à API Gateway & Reverse Proxy (Nginx + Spring Cloud Gateway)