Rövid útmutató a Spring Cloud megszakítóhoz

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk a Spring Cloud Circuit Breaker projektet és megtanulják, hogyan használhatjuk ki.

Először megnézzük, mit kínál a Spring Cloud megszakító a meglévő megszakító megvalósítások mellett. Ezután megtanuljuk, hogyan kell használni a Spring Boot automatikus konfigurációs mechanizmust egy vagy több megszakító integrálásához alkalmazásunkba.

Ne feledje, hogy a megszakító és működésükről bővebb információt a Bevezetés a Hystrix-ba, a Spring Cloud Netflix Hystrix és a Resilience4j útmutatójába olvashatunk.

2. Tavaszi felhő megszakító

Egészen a közelmúltig a Spring Cloud csak egy lehetőséget biztosított számunkra, hogy alkalmazásunkba megszakítókat adjunk. Ez a Netflix Hystrix használatával történt a Spring Cloud Netflix projekt részeként.

A Spring Cloud Netflix projekt valójában csak egy annotáció-alapú csomagoló könyvtár a Hystrix körül. Ezért ez a két könyvtár szorosan összekapcsolódik. Ez azt jelenti, hogy az alkalmazás megváltoztatása nélkül nem válthatunk másik megszakító megvalósításra.

A Spring Cloud Circuit Breaker projekt megoldja ezt. Absztrakciós réteget biztosít a különböző megszakítók megvalósításai között. Dugaszolható architektúra. Tehát kódolhatunk a megadott absztrakcióval / interfésszel, és igényeink alapján válthatunk egy másik megvalósításra.

Példáink: csak a Resilience4J megvalósítására fogunk összpontosítani. Ezek a technikák azonban alkalmazhatók más pluginekhez is.

3. Automatikus konfigurálás

Ahhoz, hogy alkalmazásunkban egy adott megszakító megvalósítást alkalmazzunk, hozzá kell adnunk a megfelelő rugós indítót. Esetünkben használjuk tavasz-felhő-indító-megszakító-ellenálló képesség4j:

 org.springframework.cloud spring-cloud-starter-circuitbreaker-resilience4j 1.0.2.FELHASZNÁLÁS 

Az automatikus konfigurációs mechanizmus konfigurálja a szükséges megszakító babokat ha meglátja az egyik kezdőt az osztályúton.

Ha le akarjuk tiltani a Resilience4J automatikus konfigurálását, beállíthatjuk a spring.cloud.circuitbreaker.resilience4j.engedélyezve tulajdonhoz hamis.

4. Egyszerű megszakító példa

Hozzunk létre egy webalkalmazást a Spring Boot segítségével, hogy felfedezhessük a Spring Cloud Circuit Breaker könyvtár működését.

Felépítünk egy egyszerű webszolgáltatást, amely visszaadja az albumok listáját. Tegyük fel, hogy a nyers listát egy harmadik fél szolgáltatja. Az egyszerűség kedvéért a Jsonplaceholder által biztosított külső dummy API-t fogjuk használni a lista lekéréséhez:

//jsonplaceholder.typicode.com/albums

4.1. Hozzon létre megszakítót

Készítsük el az első megszakítónkat. Kezdjük azzal, hogy beadunk egy példányt a CircuitBreakerFactory bab:

@Service public class AlbumService {@Autowired private CircuitBreakerFactory circuitBreakerFactory; // ...}

Most könnyen létrehozhatunk egy megszakítót a CircuitBreakerFactory # létrehozása módszer. Argumentumként a megszakító azonosítóját veszi:

CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("megszakító");

4.2. Csomagoljon egy feladatot egy megszakítóba

A megszakítóval védett feladat bepakolásához és futtatásához meg kell hívnunk az r-tENSZ módszer, amely a Támogató érvként.

public String getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("megszakító"); Karakterlánc URL = "//jsonplaceholder.typicode.com/albums"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class)); }

A megszakító futtatja a módszerünket helyettünk, és hibatűrést biztosít.

Előfordulhat, hogy külső szolgáltatásunk túl sokáig tarthat, mire válaszolhat, váratlan kivételt hozhat, vagy a külső szolgáltatás vagy gazdagép nem létezik. Ebben az esetben, tartalékot tudunk biztosítani második érvként a fuss módszer:

public String getAlbumList () {CircuitBreaker circuitBreaker = circuitBreakerFactory.create ("megszakító"); Karakterlánc URL = "// localhost: 1234 / nem valós"; return circuitBreaker.run (() -> restTemplate.getForObject (url, String.class), dobható -> getDefaultAlbumList ()); }

A tartalékhoz tartozó lambda megkapja a Dobható bemenetként leírva a hibát. Ez azt jelenti, hogy a kivétel típusa alapján különböző tartalék eredményeket tudunk szolgáltatni a hívónak ez váltotta ki a tartalékot.

Ebben az esetben nem vesszük figyelembe a kivételt. Csak egy gyorsítótárazott albumlistát adunk vissza.

Ha a külső hívás kivétellel zárul le, és nem biztosít tartalékot, a NoFallbackAvailableException dobja Spring.

4.3. Vezérlő építése

Most fejezzük be a példánkat, és hozzunk létre egy egyszerű vezérlőt, amely meghívja a szolgáltatási módszereket és bemutatja az eredményeket egy böngészőn keresztül:

@RestController public class Controller {@Autowired private service service; @GetMapping ("/ albums") nyilvános karakterlánc-albumok () {return service.getAlbumList (); }}

Végül hívjuk a REST szolgáltatást, és nézzük meg az eredményeket:

[GET] // localhost: 8080 / albumok

5. Globális egyéni konfiguráció

Általában az alapértelmezett konfiguráció nem elegendő. Ezért a felhasználási eseteink alapján egyedi konfigurációjú megszakítókat kell létrehoznunk.

Az alapértelmezett konfiguráció felülbírálásához meg kell adnunk a saját babunkat és tulajdonságait az a-ban @ Konfiguráció osztály.

Itt meghatározzuk az összes megszakító globális konfigurációját. Emiatt, meg kell határoznunk a Testreszabás bab. Tehát használjuk a Rugalmasság4JCircuitBreakerFactory végrehajtás.

Először meghatározzuk a megszakító és az időkorlátozó konfigurációs osztályait a Resilience4j oktatóanyag szerint:

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

Ezután ágyazzuk be a konfigurációt a Testreszabás babot a Resilience4JCircuitBreakerFactory.configureDefault módszer:

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

6. Specifikus egyéni konfiguráció

Természetesen, alkalmazásunkban több megszakító is lehet. Ezért egyes esetekben minden megszakítóhoz külön konfigurációra van szükségünk.

Hasonlóképpen definiálhatunk egyet vagy többet is Testreszabás bab. Ezután mindegyikhez különböző konfigurációt adhatunk a Resilience4JCircuitBreakerFactory.configure módszer:

@Bean public Customizer specificCustomConfiguration1 () {// az circuitBreakerConfig és a timeLimiterConfig objektumok visszaadják a gyárat -> factory.configure (építő -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterCreak) "; }

Itt megadunk egy második paramétert, a konfigurálandó megszakító azonosítóját.

Több megszakítót is beállíthatunk ugyanazzal a konfigurációval, ha megadjuk a megszakítók azonosítóinak listáját ugyanahhoz a módszerhez:

@Bean public Customizer specificCustomConfiguration2 () {// az circuitBreakerConfig és a timeLimiterConfig objektumok visszaadják a gyárat -> factory.configure (builder -> builder.circuitBreakerConfig (circuitBreakerConfig) .timeLimiterConfig (timeLimiterCreaker ",builder2 "circuitBreaker3"); }

7. Alternatív megvalósítások

Láttuk, hogyan kell használni a Rugalmasság4j megvalósítás egy vagy több megszakító létrehozására a Spring Cloud megszakítóval.

Vannak azonban más, a Spring Cloud Circuit Breaker által támogatott megvalósítások is, amelyeket felhasználhatunk alkalmazásunkban:

  • Hystrix
  • Őrszem
  • Tavaszi újrapróbálkozás

Érdemes megemlíteni, hogy keverhetjük a megszakítók különböző megvalósításait alkalmazásunkban. Nem csak egy könyvtárra korlátozódunk.

A fenti könyvtárak több képességgel rendelkeznek, mint amit itt feltártunk. A Spring Cloud megszakító azonban csak a megszakító rész absztrakciója. Például a Resilience4j más modulokat is kínál, például RateLimiter, Válaszfal, Próbálja újra amellett, hogy a Biztosíték és TimeLimiter ebben a cikkben használt modulok.

8. Következtetés

Ebben a cikkben felfedeztük a Spring Cloud Circuit Breaker projektet.

Először megtudtuk, mi az a Spring Cloud megszakító, és hogyan teszi lehetővé, hogy megszakítókat adjunk alkalmazásunkhoz.

Ezután a Spring Boot automatikus konfigurációs mechanizmust használtuk fel annak bemutatására, hogy miként definiálhatjuk és integrálhatjuk a megszakítókat. Emellett bemutattuk a Spring Cloud Circuit Breaker működését egy egyszerű REST szolgáltatás révén.

Végül megtanultuk konfigurálni az összes megszakítót együtt, valamint külön-külön.

Mint mindig, az oktatóanyag forráskódja is elérhető a GitHubon.