Bevezetés a Spring Cloud OpenFeign-ba

1. Áttekintés

Ebben az oktatóanyagban a Spring Cloud OpenFeign - egy deklaratív REST klienst írjuk le a Spring Boot alkalmazásokhoz.

A Feign a plug-in annotation támogatással megkönnyíti a webszolgáltatás-ügyfelek írását, amely magában foglalja a Feign és JAX-RS kommentárokat.

Emellett a Spring Cloud támogatja a tavaszi MVC kommentárokat és azok használatát HttpMessageConverter amint azt a Tavaszi Webben használták.

Nagyszerű dolog a Feign használatában, hogy a szolgáltatás hívásához nem kell semmilyen kódot írnunk, csak az interfész definícióját.

2. Függőségek

Először egy Spring Boot webprojekt létrehozásával és a tavasz-felhő-kezdő-nyílt függőség a mi pom.xml fájl:

 org.springframework.cloud spring-cloud-starter-openfeign 

Ezenkívül hozzá kell adnunk a tavasz-felhő-függőségek:

    org.springframework.cloud tavasz-felhő-függőségek $ {spring-cloud.version} pom import 

Megtalálhatjuk a tavasz-felhő-kezdő-nyílt és tavasz-felhő-függőségek a Maven Central-on.

3. Feign Client

Ezután hozzá kell tennünk @EnableFeignClients főosztályunknak:

@SpringBootApplication @EnableFeignClients public class ExampleApplication {public static void main (String [] args) {SpringApplication.run (ExampleApplication.class, args); }}

Ezzel a feljegyzéssel lehetővé tesszük azoknak az interfészeknek az összetevő-vizsgálatát, amelyek Feign kliensnek nyilvánítják magukat.

Azután, deklarálunk egy Feign klienst a @FeignClient kommentár:

@FeignClient (value = "jplaceholder", url = "//jsonplaceholder.typicode.com/") nyilvános felület JSONPlaceHolderClient {@RequestMapping (method = RequestMethod.GET, value = "/ posts") getPosts (); @RequestMapping (metódus = RequestMethod.GET, value = "/ posts / {postId}", produkció = "application / json") GetPostById (@PathVariable ("postId") Long postId) bejegyzés; }

Ebben a példában beállítottunk egy klienst a JSONPlaceHolder API-kból történő olvasásra.

A érték érv a @FeignClient az annotáció kötelező, önkényes ügyfélnév, míg a url argumentummal adjuk meg az API alap URL-t.

Továbbá, mivel ez a felület egy Feign kliens, a Spring Web kommentárok segítségével deklarálhatjuk azokat az API-kat, amelyekhez el akarunk jutni.

4. Konfiguráció

Most nagyon fontos ezt megérteni minden Feign kliens testreszabható összetevőkből áll.

A Spring Cloud igény szerint új alapértelmezett készletet hoz létre minden megnevezett ügyfél számára a FeignClientsConfiguration osztály, amelyet a következő szakaszban leírtak szerint testre szabhatunk.

A fenti osztály ezeket a babokat tartalmazza:

  • Dekóder - ResponseEntityDecoder, amely beburkol SpringDecoder, dekódolásához használt Válasz
  • Encoder - SpringEncoderkódolására használt RequestBody
  • Logger - Slf4jLogger a Feign által használt alapértelmezett naplózó
  • Szerződés - SpringMvcContract, amely annotációk feldolgozását biztosítja
  • Feign-Builder - HystrixFeign.Builder az alkatrészek felépítéséhez
  • Ügyfél - LoadBalancerFeignClient vagy alapértelmezett Feign kliens

4.1. Egyedi babkonfiguráció

Ha egy vagy több ilyen babot szeretnénk testre szabni, felülírhatjuk őket a használatával @ Konfiguráció osztály, amelyet aztán hozzáadunk a FeignClient kommentár:

@FeignClient (value = "jplaceholder", url = "//jsonplaceholder.typicode.com/", configuration = MyClientConfiguration.class)
@Configuration public class MyClientConfiguration {@Bean public OkHttpClient client () {return new OkHttpClient (); }}

Ebben a példában azt mondjuk Feignnek, hogy használja OkHttpClient az alapértelmezett helyett a HTTP / 2 támogatására.

A Feign több klienst támogat különböző használati esetekben, beleértve a ApacheHttpClient, amely további fejléceket küld a kéréssel - például Tartalom-hossz, amire egyes szerverek számítanak.

Ezeknek az ügyfeleknek a használatához ne felejtsük el hozzáadni a szükséges függőségeket az ügyfeleinkhez pom.xml fájl, például:

 io.github.openfeign feign-okhttp io.github.openfeign feign-httpclient 

Megtalálhatjuk a színlelt-okhttp és színlelt-kliens a Maven Central-on.

4.2. Konfigurálás a Tulajdonságok használatával

Ahelyett, hogy a @ Konfiguráció osztály, az alkalmazás tulajdonságait felhasználhatjuk a Feign kliensek konfigurálásához, ahogy ez látható alkalmazás.yaml példa:

színlelés: kliens: config: alapértelmezett: connectTimeout: 5000 readTimeout: 5000 loggerLevel: basic

Ezzel a konfigurációval az időkorlátokat 5 másodpercre, a naplózó szintjét pedig alapvető minden bejelentett ügyfél számára az alkalmazásban.

Végül létrehozhatjuk a konfigurációt a alapértelmezett kliens névként az összes konfigurálásához @FeignClient objektumokat, vagy deklarálhatjuk a színlelt kliens nevét egy konfigurációhoz:

színlelés: kliens: config: jplaceholder:

Ha mindkettőnk van @ Konfiguráció A bab és a konfigurációs tulajdonságok, a konfigurációs tulajdonságok felülírják @ Konfiguráció értékek.

5. Elfogók

Elfogók hozzáadása a Feign további hasznos funkciója.

Az elfogók különféle implicit feladatokat hajthatnak végre, a hitelesítéstől a naplózásig, minden HTTP-kéréshez / válaszhoz.

Ebben a szakaszban saját elfogóinkat valósítjuk meg, valamint a Spring Cloud OpenFeign által biztosított csomagot is felhasználjuk. Mindkettő fog minden kéréshez adjon hozzá egy alap hitelesítési fejlécet.

5.1. Végrehajtás RequestInterceptor

Tehát az alábbi részletben valósítsuk meg egyéni kérés-elfogónkat:

@Bean public RequestInterceptor requestInterceptor () {return requestTemplate -> {requestTemplate.header ("felhasználó", felhasználónév); requestTemplate.header ("jelszó", jelszó); requestTemplate.header ("Elfogadás", ContentType.APPLICATION_JSON.getMimeType ()); }; }

Továbbá ahhoz, hogy az elfogót hozzáadjuk a kérési lánchoz, csak hozzá kell adnunk ezt a babot a sajátunkhoz @ Konfiguráció osztály, vagy ahogy korábban láttuk, deklarálja a tulajdonság fájlban:

színlelés: kliens: config: alapértelmezett: requestInterceptors: com.baeldung.cloud.openfeign.JSONPlaceHolderInterceptor

5.2. Használata BasicAuthRequestInterceptor

Alternatív megoldásként használhatjuk a BasicAuthRequestInterceptor osztály, amelyet a Spring Cloud OpenFeign nyújt:

@Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor () {return new BasicAuthRequestInterceptor ("felhasználónév", "jelszó"); }

Ilyen egyszerű! Most az összes kérelem tartalmazza az alapvető hitelesítési fejlécet.

6. Hystrix támogatás

Feign támogatja a Hystrixet, tehát ha engedélyeztük, megvalósíthatjuk a tartalék mintát.

A tartalék mintával, ha a távoli szolgáltatáshívás nem sikerül, kivételt nem generál, a szolgáltatás fogyasztója alternatív kódútvonalat hajt végre, hogy megpróbálja a műveletet más módon végrehajtani.

A cél eléréséhez engedélyeznünk kell a Hystrix hozzáadását színlelt.hystrix.engedélyezett = igaz a tulajdonságfájlban.

Ez lehetővé teszi számunkra a szolgáltatás meghibásodásakor meghívott tartalék módszerek megvalósítását:

@Component public class JSONPlaceHolderFallback implementálja a JSONPlaceHolderClient {@Override public list getPosts () {return Collections.emptyList (); } @Orride public Post getPostById (Long postId) {return null; }}

Annak érdekében, hogy Feign tudassa, hogy tartalék módszereket biztosítottak, a tartalék osztályunkat is be kell állítanunk a @FeignClient kommentár:

@FeignClient (value = "jplaceholder", url = "//jsonplaceholder.typicode.com/", fallback = JSONPlaceHolderFallback.class) nyilvános felület JSONPlaceHolderClient {// APIs}

7. Naplózás

Minden Feign klienshez alapértelmezés szerint naplózót hoznak létre.

A naplózás engedélyezéséhez be kell jelentenünk a alkalmazás.tulajdons fájl az ügyfélfelületek csomagnevével:

logging.level.com.baeldung.cloud.openfeign.client: HIBÁK

Vagy ha csak egy adott kliens számára akarjuk engedélyezni a naplózást, használhatjuk a teljes osztálynevet:

logging.level.com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient: HIBÁK

Vegye figyelembe, hogy a Feign naplózás csak a HIBÁK szint.

A Logger.Level hogy kliensenként konfigurálhatjuk, jelzi, hogy mennyit kell naplózni:

@Configuration public class ClientConfiguration {@Bean Logger.Level feignLoggerLevel () {return Logger.Level.BASIC; }}

Négy naplózási szint közül választhat:

  • EGYIK SEM - nincs naplózás, ez az alapértelmezett
  • ALAPVETŐ - csak a kérési módszert, az URL-t és a válasz állapotát naplózza
  • FEJEZŐK - naplózza az alapinformációkat a kérés és válasz fejlécekkel együtt
  • TELJES - naplózza a törzset, a fejléceket és a metaadatokat mind kérés, mind válasz esetén

8. Hibakezelés

Feign alapértelmezett hibakezelője, ErrorDecoder.default, mindig dob egy FeignException.

Most ez a viselkedés nem mindig a leghasznosabb. Így, A dobott kivétel testreszabásához használhatjuk a CustomErrorDecoder:

public class CustomErrorDecoder implementálja a ErrorDecoder {@Override public Exception decode (String methodKey, Response response) {switch (response.status ()) {case 400: return new BadRequestException (); 404. eset: return new NotFoundException (); alapértelmezett: return new Exception ("Általános hiba"); }}}

Ezután, ahogy korábban tettük, le kell cserélnünk az alapértelmezettet ErrorDecoder babot adva a @ Konfiguráció osztály:

@Configuration public class ClientConfiguration {@Bean public ErrorDecoder errorDecoder () {return new CustomErrorDecoder (); }}

9. Következtetés

Ebben a cikkben megvitattuk a Spring Cloud OpenFeign programot és annak megvalósítását egy egyszerű mintaalkalmazásban.

Ráadásul láttuk, hogyan konfigurálhatunk egy klienst, hogyan adhatunk elfogókat a kéréseinkhez, és hogyan kezelhetjük a hibákat Hystrix és ErrorDecoder.

Szokás szerint az ebben az oktatóanyagban bemutatott összes kódminta elérhető a GitHubon.


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