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.