Úvod do Spring Cloud OpenFeign

1. Prehľad

V tomto výučbe popíšeme Spring Cloud OpenFeign - deklaratívny klient REST pre aplikácie Spring Boot.

Funkcia Feign uľahčuje písanie klientom webových služieb vďaka pripojiteľnej podpore anotácií, ktorá obsahuje anotácie Feign a anotácie JAX-RS.

Spring Cloud tiež pridáva podporu pre anotácie Spring MVC a pre ich použitie HttpMessageConverters ako sa používa v jarnom webe.

Skvelá vec pri používaní aplikácie Feign je, že nemusíme písať žiadny kód na volanie služby, okrem definície rozhrania.

2. Závislosti

Najskôr začneme vytvorením webového projektu Spring Boot a pridaním súboru spring-cloud-starter-openfeign závislosť na našom pom.xml spis:

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

Budeme tiež musieť pridať závislosti jar-oblak:

    org.springframework.cloud jar-cloud-závislosti $ {spring-cloud.version} import pom 

Nájdeme najnovšie verzie servera spring-cloud-starter-openfeign a závislosti jar-oblak na Maven Central.

3. Falošný klient

Ďalej musíme pridať @EnableFeignClients do našej hlavnej triedy:

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

Pomocou tejto anotácie umožňujeme skenovanie komponentov pre rozhrania, ktoré deklarujú, že sú klientmi typu Feign.

Potom, deklarujeme Falošného klienta pomocou @FeignClient anotácia:

@FeignClient (value = "jplaceholder", url = "//jsonplaceholder.typicode.com/") verejné rozhranie JSONPlaceHolderClient {@RequestMapping (method = RequestMethod.GET, value = "/ posts") List getPosts (); @RequestMapping (method = RequestMethod.GET, value = "/ posts / {postId}", produce = "application / json") Post getPostById (@PathVariable ("postId") Long postId); }

V tomto príklade sme nakonfigurovali klienta na čítanie z rozhraní API JSONPlaceHolder.

The hodnotu argument prešiel v @FeignClient anotácia je povinné, ľubovoľné meno klienta, zatiaľ čo s url argument, zadáme základnú URL API.

Ďalej, keďže toto rozhranie je klientom Feign, môžeme pomocou jarných webových anotácií deklarovať API, ktoré chceme osloviť.

4. Konfigurácia

Teraz je veľmi dôležité to pochopiť každý klient Feign sa skladá zo sady prispôsobiteľných komponentov.

Spring Cloud vytvára novú predvolenú množinu na požiadanie pre každého pomenovaného klienta pomocou FeignClientsConfiguration triedy, ktorú môžeme prispôsobiť, ako je vysvetlené v nasledujúcej časti.

Vyššie uvedená trieda obsahuje tieto fazule:

  • Dekodér - ResponseEntityDecoder, ktorý obaľuje SpringDecoder, slúži na dekódovanie Odozva
  • Kodér - SpringEncoder, ktorý sa používa na kódovanie súboru RequestBody
  • Logger - Slf4jLogger je predvolený záznamník používaný programom Feign
  • Zmluva - SpringMvcContract, ktorá poskytuje spracovanie anotácií
  • Feign-Builder - HystrixFeign. Staviteľ použité na konštrukciu komponentov
  • Zákazník - LoadBalancerFeignClient alebo predvolený Predstierať klienta

4.1. Konfigurácia vlastnej fazule

Ak chceme prispôsobiť jednu alebo viac týchto zŕn, môžeme ich prepísať pomocou a @ Konfigurácia triedy, ktorú potom pridáme do FeignClient anotácia:

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

V tomto príklade povieme aplikácii Feign OkHttpClient namiesto predvoleného podporuje protokol HTTP / 2.

Feign podporuje viacerých klientov pre rôzne prípady použitia, vrátane ApacheHttpClient, ktorá s požiadavkou odošle viac hlavičiek - napríklad Dĺžka obsahu čo niektoré servery očakávajú.

Ak chcete týchto klientov využívať, nezabudnite k nim pridať požadované závislosti pom.xml súbor, napríklad:

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

Nájdeme najnovšie verzie servera predstierať-okhttp a feign-httpclient na Maven Central.

4.2. Konfigurácia pomocou vlastností

Namiesto použitia a @ Konfigurácia trieda, môžeme použiť vlastnosti aplikácie na konfiguráciu Feign klientov, ako je uvedené v tomto aplikácia.yaml príklad:

predstierať: klient: konfigurácia: predvolené: connectTimeout: 5 000 readTimeout: 5 000 loggerLevel: základná

V tejto konfigurácii nastavujeme časové limity na 5 sekúnd a úroveň záznamníka na základné pre každého deklarovaného klienta v aplikácii.

Nakoniec môžeme konfiguráciu vytvoriť pomocou predvolené ako názov klienta nakonfigurovať všetky @FeignClient objekty, alebo môžeme deklarovať názov predstieraného klienta pre konfiguráciu:

feign: client: config: jplaceholder:

Ak máme oboch @ Konfigurácia fazuľa a vlastnosti konfigurácie, vlastnosti konfigurácie budú prepísané @ Konfigurácia hodnoty.

5. Interceptory

Pridanie zachytávačov je ďalšia užitočná funkcia, ktorú poskytuje Feign.

Zachytávače môžu vykonávať rôzne implicitné úlohy, od autentifikácie až po protokolovanie, pre každú požiadavku / odpoveď HTTP.

V tejto časti implementujeme náš vlastný zachytávač a tiež použijeme ten, ktorý poskytuje Spring Cloud OpenFeign out-of-the-box. Obaja budú ku každej žiadosti pridajte hlavičku základného overenia.

5.1. Implementácia RequestInterceptor

Takže v úryvku nižšie implementujme náš vlastný zachytávač žiadostí:

@Bean public RequestInterceptor requestInterceptor () {return requestTemplate -> {requestTemplate.header ("user", username); requestTemplate.header ("heslo", heslo); requestTemplate.header ("Prijať", ContentType.APPLICATION_JSON.getMimeType ()); }; }

Ak chcete tiež pridať zachytávač do reťazca požiadaviek, stačí pridať túto fazuľu do našej @ Konfigurácia triedy, alebo ako sme videli predtým, deklarujte to v súbore vlastností:

predstierať: klient: konfigurácia: predvolené: requestInterceptors: com.baeldung.cloud.openfeign.JSONPlaceHolderInterceptor

5.2. Použitím BasicAuthRequestInterceptor

Prípadne môžeme použiť BasicAuthRequestInterceptor trieda, ktorú poskytuje Spring Cloud OpenFeign:

@Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor () {vrátiť nový BasicAuthRequestInterceptor ("používateľské meno", "heslo"); }

Je to jednoduché! Teraz budú všetky požiadavky obsahovať hlavičku základného overenia.

6. Podpora Hystrix

Feign podporuje Hystrix, takže ak sme ho povolili, môžeme implementovať záložný vzor.

S náhradným vzorom, keď zlyhá volanie vzdialenej služby, namiesto generovania výnimky spotrebiteľ služby vykoná alternatívnu cestu kódu, aby sa pokúsil vykonať akciu inými prostriedkami.

Na dosiahnutie tohto cieľa je potrebné povoliť pridávanie Hystrixu feign.hystrix.enabled = true v súbore vlastností.

To nám umožňuje implementovať záložné metódy, ktoré sa volajú, keď služba zlyhá:

@ Verejná trieda komponentu JSONPlaceHolderFallback implementuje JSONPlaceHolderClient {@Override public List getPosts () {return Collections.emptyList (); } @Override public Post getPostById (Long postId) {return null; }}

Aby sme Feign informovali, že boli poskytnuté záložné metódy, musíme tiež nastaviť našu záložnú triedu v @FeignClient anotácia:

@FeignClient (value = "jplaceholder", url = "//jsonplaceholder.typicode.com/", fallback = JSONPlaceHolderFallback.class) verejné rozhranie JSONPlaceHolderClient {// APIs}

7. Protokolovanie

Pre každého klienta Feign sa predvolene vytvára záznamník.

Ak chcete povoliť protokolovanie, mali by sme to deklarovať v aplikácia.vlastníctvosúbor s použitím názvu balíka klientských rozhraní:

logging.level.com.baeldung.cloud.openfeign.client: DEBUG

Alebo ak chceme povoliť protokolovanie iba pre jedného konkrétneho klienta v balíku, môžeme použiť celý názov triedy:

logging.level.com.baeldung.cloud.openfeign.client.JSONPlaceHolderClient: DEBUG

Upozorňujeme, že protokolovanie Feign reaguje iba na DEBUG úrovni.

The Záznamník. Úroveň ktoré môžeme nakonfigurovať na jedného klienta, naznačuje, koľko sa má prihlásiť:

@ Konfigurácia verejná trieda ClientConfiguration {@Bean Logger.Level feignLoggerLevel () {návrat Logger.Level.BASIC; }}

Na výber sú štyri úrovne protokolovania:

  • ŽIADNE - žiadne protokolovanie, čo je predvolené
  • ZÁKLADNÉ - zaznamenajte iba metódu žiadosti, URL a stav odpovede
  • HLAVICE - zaznamenať základné informácie spolu s hlavičkami požiadaviek a odpovedí
  • PLNÉ - zaznamenajte telo, hlavičky a metadáta pre požiadavku aj odpoveď

8. Spracovanie chýb

Predvolený obslužný program chyby, ErrorDecoder.default, vždy hodí a FeignException.

Toto správanie nie je vždy najužitočnejšie. Takže na prispôsobenie vyvolanej výnimky môžeme použiť a CustomErrorDecoder:

verejná trieda CustomErrorDecoder implementuje ErrorDecoder {@Override public Exception decode (String methodKey, Response response) {switch (response.status ()) {prípad 400: return new BadRequestException (); prípad 404: vrátiť nový NotFoundException (); predvolené: vrátiť novú výnimku ("generická chyba"); }}}

Potom, ako sme to už urobili predtým, musíme zmeniť predvolené nastavenie ErrorDecoder pridaním fazule do @ Konfigurácia trieda:

@ Konfigurácia verejnej triedy ClientConfiguration {@Bean public ErrorDecoder errorDecoder () {return new CustomErrorDecoder (); }}

9. Záver

V tomto článku sme diskutovali o Spring Cloud OpenFeign a jeho implementácii v jednoduchej ukážkovej aplikácii.

Okrem toho sme videli, ako nakonfigurovať klienta, ako pridať zachytávače k ​​našim požiadavkám a ako zvládať chyby pomocou Hystrix a ErrorDecoder.

Ako obvykle sú všetky ukážky kódu zobrazené v tomto tutoriále dostupné na GitHub.


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