BT

Accueil InfoQ Actualités Spring Cloud Propose Une Interface Pour Circuit-Breakers

Spring Cloud Propose Une Interface Pour Circuit-Breakers

This item in japanese

Favoris

Spring Cloud incubator propose un nouveau projet appelé Spring Cloud Circuit Breaker, qui fournit une interface pour faciliter l'utiliser de circuit-breakers. Un circuit-breaker définit un ensemble de seuils qui, une fois dépassés, arrêteront l'exécution d'un bloc de code. Cela permettra aux systèmes d’échouer rapidement, d’empêcher les pannes en cascade et la surcharge du système. 

Le projet Spring Cloud Circuit Breaker est une couche d’abstraction pour les bibliothèques de type circuit-breaker populaires en Java. Le projet prend actuellement en charge Netflix HystrixResilience4jSentinel et Spring Retry.

Spring Cloud est un ensemble d’outils pouvant être utilisés pour créer des systèmes distribués dans le cloud. Spring Cloud fournit des fonctionnalités pour les cas d'utilisation typiques tels que l'enregistrement et la découverte de services, le routage, l'équilibrage de charge et les circuit-breakers. Jusqu'à récemment, la fonctionnalité de circuit-breaker de Spring Cloud reposait uniquement sur Netflix Hystrix.

Avec le nouveau projet Spring Cloud Circuit Breaker, les développeurs ont la possibilité de choisir d’autres implémentations de circuit-breaker en utilisant l'interface. Pour choisir une implémentation spécifique au moment de l'exécution, il est nécessaire d'ajouter le fichier starter JAR approprié dans le classpath de l'application.

L'extrait de code ci-dessous montre comment un service peut exploiter l'API CircuitBreakerFactory pour créer un CircuitBreaker et encapsuler des appels vers un service de recommandations externe à l'intérieur du CircuitBreaker.

@Service
public static class ProductsService {
  private RestTemplate rest;
  private CircuitBreaker circuitBreaker;
  public ProductsService(RestTemplate rest, CircuitBreakerFactory cbFactory) {
    this.rest = rest;
    this.circuitBreaker = cbFactory.create("recs");
  }
  public ProductList getProducts() {
    return circuitBreaker.run(
        () -> rest.getForObject("/recs", ProductList.class),
        throwable -> "fallback");
  }
}

La méthode d'exécution du CircuitBreaker prend deux arguments, un Supplier et une fonction de callback. Le Supplier est utilisé pour fournir la logique d'exécution à l'intérieur du CircuitBreaker. La fonction de callback est utilisée pour spécifier la logique à exécuter lorsque le CircuitBreaker se déclenche.

Spring Cloud Circuit Breaker fournit une version réactive sous la forme de l’API ReactiveCircuitBreakerFactory. Elle peut être utilisée dans des applications construites avec le projet Reactor. Ci-dessous un extrait qui montre comment un service peut utiliser la version réactive de CircuitBreaker pour encapsuler des appels vers un service de recommandations externe :

@Service
public static class ProductsService {
  private WebClient webClient;
  private ReactiveCircuitBreaker circuitBreaker;
  public ProductsService(WebClient webClient,
        ReactiveCircuitBreakerFactory cbFactory) {
    this.webClient = webClient;
    this.circuitBreaker = cbFactory.create("recs");
  }
  public Mono<ProductList> getProducts() {
    return circuitBreaker.run(
        webClient
            .get()
            .uri("/recs")
            .retrieve()
            .bodyToMono(ProductList.class),  throwable -> return Mono.just("fallback"));
  }
}

Le comportement des circuit-breakers peut être configuré à l'aide d'un bean implémentant l'interface Customizer. Un Customizer peut fournir une configuration par défaut pour tous les circuit-breakers ainsi que des configurations spécifiques pour chaque circuit-breaker.

Ci-dessous un extrait de code qui montre comment fournir une configuration par défaut pour tous les circuit-breakers s'appuyant sur Resilience4j :

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
  TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig
      .custom()
      .timeoutDuration(Duration.ofSeconds(4))
      .build();
  return factory ->
      factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
          .timeLimiterConfig(timeLimiterConfig)
          .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
          .build());
}

Les jars de Spring Cloud Circuit Breaker sont actuellement disponibles dans le référentiel snapshot de Spring. La documentation du projet décrit les concepts de base et les différentes options de configuration.

Evaluer cet article

Pertinence
Style

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Commentaires de la Communauté

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

BT

Votre profil est-il à jour? Merci de prendre un instant pour vérifier.

Note: en cas de modification de votre adresse email, une validation sera envoyée.

Nom de votre entreprise:
Rôle dans votre entreprise:
Taille de votre entreprise:
Pays/Zone:
État/Province/Région:
Vous allez recevoir un email pour confirmer la nouvelle adresse email. Ce pop-up va se fermer de lui-même dans quelques instants.