Hurtigguide til Spring Cloud Circuit Breaker

1. Oversikt

I denne veiledningen, Vi introduserer Spring Cloud Circuit Breaker-prosjektet og lære hvordan vi kan bruke det.

Først skal vi se hva Spring Cloud Circuit Breaker tilbyr i tillegg til eksisterende strømbryterimplementeringer. Deretter lærer vi hvordan vi bruker Spring Boot auto-konfigurasjonsmekanismen til å integrere en eller flere strømbrytere i applikasjonen vår.

Merk at vi har mer informasjon om hva en strømbryter er og hvordan de fungerer i Introduksjon til Hystrix, Spring Cloud Netflix Hystrix og Guide to Resilience4j.

2. Spring Cloud Circuit Breaker

Inntil nylig ga Spring Cloud oss ​​bare en måte å legge til strømbrytere i applikasjonene våre. Dette var gjennom bruk av Netflix Hystrix som en del av Spring Cloud Netflix-prosjektet.

Spring Cloud Netflix-prosjektet er egentlig bare et kommentarbasert omslagsbibliotek rundt Hystrix. Derfor er disse to bibliotekene tett koblet. Dette betyr at vi ikke kan bytte til en annen effektbryterimplementering uten å endre applikasjonen.

Spring Cloud Circuit Breaker-prosjektet løser dette. Det gir et abstraksjonslag på tvers av forskjellige strømbryterimplementeringer. Det er en pluggbar arkitektur. Så vi kan kode mot det medfølgende abstraksjonen / grensesnittet og bytte til en annen implementering basert på våre behov.

For våre eksempler, Vi fokuserer bare på implementeringen av Resilience4J. Imidlertid kan disse teknikkene brukes til andre plugins.

3. Autokonfigurasjon

For å kunne bruke spesifikke strømbryterimplementeringer i applikasjonen vår, må vi legge til den aktuelle vårstarteren. I vårt tilfelle, la oss bruke spring-cloud-starter-circuitbreaker-resilience4j:

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

Den automatiske konfigurasjonsmekanismen konfigurerer de nødvendige strømbryterbønnene hvis den ser en av forrettene i klassestien.

Hvis vi ønsket å deaktivere Resilience4J-autokonfigurasjonen, kunne vi stille inn spring.cloud.circuitbreaker.resilience4j.enabled eiendom til falsk.

4. Et enkelt strømbrytereksempel

La oss lage en webapplikasjon ved hjelp av Spring Boot, slik at vi kan utforske hvordan Spring Cloud Circuit Breaker-biblioteket fungerer.

Vi bygger en enkel nettjeneste som returnerer en liste over album. La oss anta at rålisten leveres av en tredjepartstjeneste. For enkelhets skyld bruker vi en ekstern dummy-API levert av Jsonplaceholder for å hente listen:

//jsonplaceholder.typicode.com/albums

4.1. Lag en strømbryter

La oss lage vår første strømbryter. Vi begynner med å injisere en forekomst av CircuitBreakerFactory bønne:

@Service offentlig klasse AlbumService {@Autowired private CircuitBreakerFactory circuitBreakerFactory; // ...}

Nå kan vi enkelt lage en strømbryter ved hjelp av CircuitBreakerFactory # lage metode. Det tar strømbryteridentifikatoren som et argument:

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

4.2. Pakk en oppgave i en strømbryter

For å pakke inn og kjøre en oppgave beskyttet av strømbryteren, må vi ringe run metode som tar en Leverandør som argument.

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

Strømbryteren kjører metoden vår for oss og gir feiltoleranse.

Noen ganger kan det ta for lang tid å svare på den eksterne tjenesten vår, kaste et uventet unntak, ellers eksisterer ikke den eksterne tjenesten eller verten. I så fall, vi kan gi et tilbakeslag som et annet argument til løpe metode:

public String getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("circuitbreaker"); String url = "// localhost: 1234 / not-real"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class), kastbar -> getDefaultAlbumList ()); }

Lambda for reservemottaket mottar Kastbar som en inngang, som beskriver feilen. Dette betyr vi kan gi forskjellige tilbakevendende resultater til den som ringer, basert på typen unntak som utløste reserven.

I dette tilfellet tar vi ikke hensyn til unntaket. Vi returnerer bare en hurtigbufret liste over album.

Hvis den eksterne samtalen avsluttes med et unntak, og ingen tilbakebetaling tilbys, NoFallbackAvailableException blir kastet av våren.

4.3. Bygg en kontroller

La oss nå fullføre eksemplet vårt og lage en enkel kontroller som kaller servicemetodene og presenterer resultatene gjennom en nettleser:

@RestController offentlig klasse Controller {@Autowired privat servicetjeneste; @GetMapping ("/ albums") offentlige strengealbum () {return service.getAlbumList (); }}

Til slutt, la oss ringe REST-tjenesten og se resultatene:

[GET] // localhost: 8080 / album

5. Global tilpasset konfigurasjon

Vanligvis er ikke standardkonfigurasjonen nok. Av denne grunn må vi lage strømbrytere med tilpassede konfigurasjoner basert på brukssakene våre.

For å overstyre standardkonfigurasjonen, må vi spesifisere våre egne bønner og egenskaper i a @Konfigurasjon klasse.

Her skal vi definere en global konfigurasjon for alle strømbrytere. Av denne grunn, vi må definere en Tilpasning bønne. Så la oss bruke Resilience4JCircuitBreakerFactory gjennomføring.

Først definerer vi bryter- og tidsbegrenserkonfigurasjonsklasser i henhold til Resilience4j-opplæringen:

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

La oss deretter legge inn konfigurasjonen i en Tilpasning bønne ved å bruke Resilience4JCircuitBreakerFactory.configureDefault metode:

@Configuration public class Resilience4JConfiguration {@Bean public Customizer globalCustomConfiguration () {// the circuitBreakerConfig and timeLimiterConfig objects return factory -> factory.configureDefault (id -> new Resilience4JConfigBuilder (id) .timeLimiterConfigConfigConfigConfig (time). )); }}

6. Spesifikk tilpasset konfigurasjon

Selvfølgelig, vi kan ha flere strømbrytere i applikasjonen vår. Derfor trenger vi i noen tilfeller en spesifikk konfigurasjon for hver strømbryter.

På samme måte kan vi definere en eller flere Tilpasning bønner. Deretter kan vi tilby en annen konfigurasjon for hver enkelt ved å bruke Resilience4JCircuitBreakerFactory.configure metode:

@Bean public Customizer specificCustomConfiguration1 () {// the circuitBreakerConfig and timeLimiterConfig objects return factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterConfig). "," }

Her gir vi en andre parameter, id for strømbryteren vi konfigurerer.

Vi kan også sette opp flere strømbrytere med samme konfigurasjon ved å gi en liste over bryter-ID-er til samme metode:

@Bean public Customizer specificCustomConfiguration2 () {// the circuitBreakerConfig and timeLimiterConfig objects return factory -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterConfig, circuitBreakerBreakerBreakerConfig)) "circuitBreaker3"); }

7. Alternative implementeringer

Vi har sett hvordan du bruker Motstandskraft4j implementering for å lage en eller flere strømbrytere med Spring Cloud Circuit Breaker.

Imidlertid er det andre implementeringer som støttes av Spring Cloud Circuit Breaker som vi kan utnytte i applikasjonen vår:

  • Hystrix
  • vakt
  • Forsøk på nytt

Det er verdt å nevne at vi kan blande og matche forskjellige implementeringer av bryter i søknaden vår. Vi er ikke bare begrenset til ett bibliotek.

Ovennevnte biblioteker har flere muligheter enn vi har utforsket her. Spring Cloud Circuit Breaker er imidlertid en abstraksjon over bare kretsbryterdelen. For eksempel tilbyr Resilience4j også andre moduler som RateLimiter, Skott, Prøv på nytt i tillegg til det CircuitBreaker og TimeLimiter moduler som brukes i denne artikkelen.

8. Konklusjon

I denne artikkelen oppdaget vi Spring Cloud Circuit Breaker-prosjektet.

Først lærte vi hva Spring Cloud Circuit Breaker er, og hvordan det lar oss legge til strømbrytere i applikasjonen vår.

Deretter utnyttet vi Spring Boot auto-konfigurasjonsmekanismen for å vise hvordan vi kan definere og integrere strømbrytere. Vi demonstrerte også hvordan Spring Cloud Circuit Breaker fungerer gjennom en enkel REST-tjeneste.

Til slutt lærte vi å konfigurere alle strømbrytere sammen, så vel som hver for seg.

Som alltid er kildekoden for denne opplæringen tilgjengelig på GitHub.


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