Beknopte handleiding voor Spring Cloud-stroomonderbreker

1. Overzicht

In deze tutorial we introduceren het Spring Cloud Circuit Breaker-project en leer hoe we er gebruik van kunnen maken.

Eerst gaan we kijken wat de Spring Cloud Circuit Breaker te bieden heeft naast de bestaande implementaties van stroomonderbrekers. Vervolgens leren we hoe we het automatische configuratiemechanisme van Spring Boot kunnen gebruiken om een ​​of meer stroomonderbrekers in onze applicatie te integreren.

Merk op dat we meer informatie hebben over wat een stroomonderbreker is en hoe ze werken in Inleiding tot Hystrix, Spring Cloud Netflix Hystrix en Guide to Resilience4j.

2. Spring Cloud-stroomonderbreker

Tot voor kort bood Spring Cloud ons slechts één manier om stroomonderbrekers in onze applicaties toe te voegen. Dit was door het gebruik van Netflix Hystrix als onderdeel van het Spring Cloud Netflix-project.

Het Spring Cloud Netflix-project is eigenlijk gewoon een op annotaties gebaseerde wrapper-bibliotheek rond Hystrix. Daarom zijn deze twee bibliotheken nauw met elkaar verbonden. Dit betekent dat we niet kunnen overschakelen naar een andere implementatie van de stroomonderbreker zonder de applicatie te wijzigen.

Het Spring Cloud Circuit Breaker-project lost dit op. Het biedt een abstractielaag over verschillende implementaties van stroomonderbrekers. Het is een inplugbare architectuur. We kunnen dus coderen tegen de geleverde abstractie / interface en overschakelen naar een andere implementatie op basis van onze behoeften.

Voor onze voorbeelden, we zullen ons alleen richten op de implementatie van Resilience4J. Deze technieken kunnen echter worden gebruikt voor andere plug-ins.

3. Automatische configuratie

Om een ​​specifieke stroomonderbrekerimplementatie in onze applicatie te gebruiken, moeten we de juiste Spring-starter toevoegen. Laten we in ons geval gebruiken spring-cloud-starter-circuitbreaker-resilience4j:

 org.springframework.cloud spring-cloud-starter-circuitbreaker-resilience4j 1.0.2.RELEASE 

Het automatische configuratiemechanisme configureert de benodigde bonen voor de stroomonderbreker als het een van de starters in het klassenpad ziet.

Als we de automatische configuratie van Resilience4J wilden uitschakelen, zouden we de spring.cloud.circuitbreaker.resilience4j.ingeschakeld eigendom aan false.

4. Een eenvoudig voorbeeld van een stroomonderbreker

Laten we een webtoepassing maken met Spring Boot zodat we kunnen onderzoeken hoe de Spring Cloud Circuit Breaker-bibliotheek werkt.

We bouwen een eenvoudige webservice die een lijst met albums retourneert. Stel dat de onbewerkte lijst wordt geleverd door een externe service. Voor de eenvoud gebruiken we een externe dummy-API die wordt geleverd door Jsonplaceholder om de lijst op te halen:

//jsonplaceholder.typicode.com/albums

4.1. Maak een stroomonderbreker

Laten we onze eerste stroomonderbreker maken. We beginnen met het injecteren van een instantie van de CircuitBreakerFactory Boon:

@Service openbare klasse AlbumService {@Autowired privé CircuitBreakerFactory circuitBreakerFactory; // ...}

Nu kunnen we eenvoudig een stroomonderbreker maken met behulp van de CircuitBreakerFactory # create methode. Het neemt de identificatie van de stroomonderbreker als argument:

CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker");

4.2. Verpak een taak in een stroomonderbreker

Om een ​​taak die wordt beschermd door de stroomonderbreker in te pakken en uit te voeren, moeten we de r bellenun methode waarvoor een Leverancier als argument.

openbare String getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker"); String url = "//jsonplaceholder.typicode.com/albums"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class)); }

De stroomonderbreker voert onze methode voor ons uit en biedt fouttolerantie.

Soms kan het te lang duren voordat onze externe service reageert, een onverwachte uitzondering genereert of de externe service of host niet bestaat. In dat geval, wij kunnen voor een uitwijk zorgen als een tweede argument voor de rennen methode:

openbare String getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker"); String url = "// localhost: 1234 / niet-echt"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class), throwable -> getDefaultAlbumList ()); }

De lambda voor de fallback krijgt de Gooibaar als input, die de fout beschrijft. Dit betekent we kunnen verschillende uitwijkresultaten aan de beller verstrekken, op basis van het type uitzondering dat veroorzaakte de terugval.

In dit geval houden we geen rekening met de uitzondering. We retourneren alleen een in de cache opgeslagen lijst met albums.

Als het externe gesprek wordt beëindigd met een uitzondering en er is geen terugval mogelijk, a NoFallbackAvailableException wordt gegooid door de lente.

4.3. Bouw een controller

Laten we nu ons voorbeeld afmaken en een eenvoudige controller maken die de servicemethoden aanroept en de resultaten presenteert via een browser:

@RestController openbare klasse Controller {@Autowired privéserviceservice; @GetMapping ("/ albums") openbare String-albums () {return service.getAlbumList (); }}

Laten we tot slot de REST-service bellen en de resultaten bekijken:

[GET] // localhost: 8080 / albums

5. Globale aangepaste configuratie

Meestal is de standaardconfiguratie niet voldoende. Om deze reden moeten we stroomonderbrekers maken met aangepaste configuraties op basis van onze gebruiksscenario's.

Om de standaardconfiguratie te overschrijven, moeten we onze eigen bonen en eigenschappen specificeren in een @Configuratie klasse.

Hier gaan we een globale configuratie definiëren voor alle stroomonderbrekers. Om deze reden, we moeten een Customizer Boon. Dus laten we de Veerkracht4JCircuitBreakerFactory implementatie.

Eerst definiëren we configuratieklassen voor stroomonderbrekers en tijdbegrenzers volgens de Resilience4j-zelfstudie:

CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom () .failureRateThreshold (50) .waitDurationInOpenState (Duration.ofMillis (1000)) .slidingWindowSize (2) .build (); TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom () .timeoutDuration (Duration.ofSeconds (4)) .build ();

Laten we vervolgens de configuratie insluiten in een Customizer boon met behulp van de Veerkracht4JCircuitBreakerFactory.configureDefault methode:

@Configuration openbare klasse Resilience4JConfiguration {@Bean openbare Customizer globalCustomConfiguration () {// de objecten circuitBreakerConfig en timeLimiterConfig retourneren de fabriek -> factory.configureDefault (id -> nieuwe Resilience4JConfigBuilder (id) .timeLimiterCirconfig (timeLimiterCirconfig). )); }}

6. Specifieke aangepaste configuratie

Natuurlijk, we kunnen meerdere stroomonderbrekers in onze applicatie hebben. Daarom hebben we in sommige gevallen voor elke stroomonderbreker een specifieke configuratie nodig.

Evenzo kunnen we een of meer definiëren Customizer bonen. Vervolgens kunnen we voor elke configuratie een andere configuratie bieden door de Resilience4JCircuitBreakerFactory.configure methode:

@Bean public Customizer specificCustomConfiguration1 () {// de objecten circuitBreakerConfig en timeLimiterConfig retourneren factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterConfig) .buildeaker ("); circuitBreaker }

Hier geven we een tweede parameter, de id van de stroomonderbreker die we configureren.

We kunnen ook meerdere stroomonderbrekers met dezelfde configuratie instellen door een lijst met stroomonderbreker-ID's voor dezelfde methode te verstrekken:

@Bean public Customizer specificCustomConfiguration2 () {// de circuitBreakerConfig en timeLimiterConfig objecten retourneren factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterConfig) "circuitBreaker "circuitBreaker3"); }

7. Alternatieve implementaties

We hebben gezien hoe u de Veerkracht4j implementatie om een ​​of meer stroomonderbrekers te maken met Spring Cloud Circuit Breaker.

Er zijn echter andere implementaties die worden ondersteund door Spring Cloud Circuit Breaker die we kunnen gebruiken in onze applicatie:

  • Hystrix
  • Sentinel
  • Spring opnieuw

Het is vermeldenswaard dat we verschillende implementaties van stroomonderbrekers kunnen combineren in onze applicatie. We zijn niet alleen beperkt tot één bibliotheek.

De bovenstaande bibliotheken hebben meer mogelijkheden dan we hier hebben onderzocht. Spring Cloud Circuit Breaker is echter een abstractie over alleen het gedeelte van de stroomonderbreker. Resilience4j biedt bijvoorbeeld ook andere modules zoals RateLimiter, Schot, Probeer het opnieuw naast de Zekering en TimeLimiter modules die in dit artikel worden gebruikt.

8. Conclusie

In dit artikel hebben we het Spring Cloud Circuit Breaker-project ontdekt.

Ten eerste hebben we geleerd wat de Spring Cloud Circuit Breaker is en hoe we hiermee stroomonderbrekers aan onze applicatie kunnen toevoegen.

Vervolgens hebben we het automatische configuratiemechanisme Spring Boot gebruikt om te laten zien hoe stroomonderbrekers kunnen worden gedefinieerd en geïntegreerd. We hebben ook laten zien hoe de Spring Cloud Circuit Breaker werkt via een eenvoudige REST-service.

Ten slotte hebben we geleerd om alle stroomonderbrekers zowel samen als afzonderlijk te configureren.

Zoals altijd is de broncode voor deze tutorial beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found