Spring Cloud - bootstrapping

1. Prehľad

Spring Cloud je rámec pre vytváranie robustných cloudových aplikácií. Rámec uľahčuje vývoj aplikácií poskytovaním riešení mnohých bežných problémov, ktorým čelí pri prechode do distribuovaného prostredia.

Cieľom aplikácií, ktoré bežia s architektúrou mikroslužieb, je zjednodušiť vývoj, nasadenie a údržbu. Rozložený charakter aplikácie umožňuje vývojárom sústrediť sa na jeden problém naraz. Vylepšenia je možné zavádzať bez ovplyvnenia ostatných častí systému.

Na druhej strane vzniknú rôzne problémy, keď sa rozhodneme pre prístup k mikroslužbám:

  • Externalizácia konfigurácie, ktorá je flexibilná a pri zmene nevyžaduje opätovné zostavenie služby
  • Zistenie služby
  • Skrytie zložitosti služieb nasadených na rôznych hostiteľoch

V tomto článku zostavíme päť mikroslužieb: konfiguračný server, server discovery, server brány, knižná služba a nakoniec hodnotiaca služba. Týchto päť mikroslužieb vytvára solídnu základnú aplikáciu na začatie vývoja cloudu a riešenie vyššie uvedených výziev.

2. Konfiguračný server

Pri vývoji cloudovej aplikácie je jedným problémom údržba a distribúcia konfigurácie do našich služieb. Naozaj nechceme tráviť čas konfiguráciou každého prostredia pred horizontálnym škálovaním našich služieb alebo riskovať narušenie bezpečnosti zapečením našej konfigurácie do našej aplikácie.

Aby sme to vyriešili, spojíme celú našu konfiguráciu do jedného úložiska Git a spojíme ju s jednou aplikáciou, ktorá spravuje konfiguráciu pre všetky naše aplikácie. Chystáme sa nastaviť veľmi jednoduchú implementáciu.

Ak sa chcete dozvedieť viac podrobností a pozrieť sa na zložitejší príklad, pozrite si náš článok Spring Cloud Configuration.

2.1. Nastaviť

Prejdite na //start.spring.io a vyberte Maven a Spring Boot 2.2.x.

Nastavte artefakt na „config. V sekcii závislostí vyhľadajte „konfiguračný server“ a pridajte tento modul. Potom stlačte generovať tlačidlo a budeme si môcť stiahnuť súbor zip s vopred nakonfigurovaným projektom vo vnútri a pripravený na použitie.

Prípadne môžeme vygenerovať a Jarná topánka projektovať a ručne pridať nejaké závislosti do súboru POM.

Tieto závislosti budú zdieľané medzi všetky projekty:

 org.springframework.boot spring-boot-starter-parent 2.2.6.RELEASE test org.springframework.boot spring-boot-starter-test test org.springframework.cloud závislosť jar-cloud Hoxton.SR4 pom import org.springframework.boot spring-boot-maven-plugin 

Pridajme závislosť pre konfiguračný server:

 org.springframework.cloud server typu spring-cloud-config-server 

Najnovšiu verziu môžeme nájsť na serveri Maven Central (spring-cloud-dependencies, test, config-server).

2.2. Jarná konfig

Aby sme povolili konfiguračný server, musíme do hlavnej triedy aplikácií pridať niekoľko anotácií:

@SpringBootApplication @EnableConfigServer verejná trieda ConfigApplication {...}

@EnableConfigServer premení našu aplikáciu na konfiguračný server.

2.3. Vlastnosti

Pridajme application.properties v src / main / resources:

server.port = 8081 spring.application.name = config spring.cloud.config.server.git.uri = file: // $ {user.home} / application-config

Najdôležitejšie nastavenie pre konfiguračný server je git.uri parameter. Toto je v súčasnosti nastavené na relatívnu cestu k súboru, ktorá sa všeobecne vyrieši c: \ Users \ {používateľské meno} \ vo Windows alebo / Users / {username} / dňa * nix. Táto vlastnosť ukazuje na úložisko Git, kde sú uložené súbory vlastností pre všetky ostatné aplikácie. V prípade potreby sa dá nastaviť na absolútnu cestu k súboru.

Tip: Na stroji so systémom Windows predhovorte hodnotu s „file: ///“, na * nix potom použite „file: //“.

2.4. Úložisko Git

Prejdite do priečinka definovaného ako spring.cloud.config.server.git.uri a pridajte priečinok konfigurácia aplikácie. CD do tohto priečinka a napíšte git init. Týmto sa inicializuje úložisko Git, kde môžeme ukladať súbory a sledovať ich zmeny.

2.5. Bež

Spustíme konfiguračný server a skontrolujeme, či funguje. Z príkazového riadku zadajte mvn spring-boot: spustiť. Tým sa spustí server.

Mali by sme vidieť tento výstup označujúci, že server je spustený:

Tomcat spustený na porte: 8081 (http)

2.6. Konfigurácia bootstrappingu

Na našich nasledujúcich serveroch budeme chcieť, aby ich vlastnosti aplikácie boli spravované týmto konfiguračným serverom. Aby sme to dosiahli, budeme musieť urobiť trochu kuracieho vajca: Nakonfigurujte vlastnosti v každej aplikácii, ktorá vie, ako hovoriť späť na tento server.

Je to bootstrap proces a každá z týchto aplikácií bude mať súbor s názvom bootstrap.properties. Bude obsahovať vlastnosti ako application.properties ale s twist:

Rodičovská jar ApplicationContext načíta bootstrap.properties najprv. To je dôležité, aby server Config mohol začať spravovať vlastnosti v systéme Windows application.properties. Je to špeciálne ApplicationContext ktorá tiež dešifruje všetky šifrované vlastnosti aplikácie.

Je rozumné udržiavať tieto súbory vlastností odlišné.bootstrap.properties slúži na prípravu konfiguračného servera a application.properties je pre vlastnosti špecifické pre našu aplikáciu. Technicky je však možné umiestniť vlastnosti aplikácie do bootstrap.properties.

Nakoniec, pretože server Config spravuje vlastnosti našej aplikácie, mohlo by sa čudovať, prečo mať application.properties vôbec? Odpoveď je, že tieto sa stále hodia ako predvolené hodnoty, ktoré snáď server Config nemá.

3. Objav

Teraz, keď máme o konfiguráciu postarané, potrebujeme spôsob, aby sa všetky naše servery navzájom našli. Tento problém vyriešime nastavením Heuréka objavovací server hore. Pretože naše aplikácie môžu bežať na ľubovoľnej kombinácii ip / port, potrebujeme centrálny register adries, ktorý môže slúžiť ako vyhľadávanie adries aplikácií.

Keď sa zriaďuje nový server, bude komunikovať so vyhľadávacím serverom a zaregistruje jeho adresu, aby s ním mohli komunikovať ostatní. Týmto spôsobom môžu iné aplikácie tieto informácie využívať pri zadávaní požiadaviek.

Ak sa chcete dozvedieť viac podrobností a vidieť zložitejšiu implementáciu objavov, pozrite si článok Spring Cloud Eureka.

3.1. Nastaviť

Opäť prejdeme na start.spring.io. Nastavte artefakt na „objav“. Vyhľadajte „server heuréka“ a pridajte túto závislosť. Vyhľadajte „konfiguračný klient“ a pridajte túto závislosť. Nakoniec vygenerujte projekt.

Prípadne môžeme vytvoriť a Jarná topánka skopírujte obsah POM z konfiguračného servera a vymeniť v týchto závislostiach:

 org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-heureka-server 

Pre informáciu, zväzky nájdeme na serveri Maven Central (konfiguračný klient, eureka-server).

3.2. Jarná konfig

Pridajme konfiguráciu Java do hlavnej triedy:

@SpringBootApplication @EnableEurekaServer verejná trieda DiscoveryApplication {...}

@EnableEurekaServer nakonfiguruje tento server ako vyhľadávací server pomocou Netflix Heuréka. Jarná topánka automaticky zistí závislosť konfigurácie od cesty triedy a vyhľadá konfiguráciu z konfiguračného servera.

3.3. Vlastnosti

Teraz pridáme dva súbory vlastností:

Najprv pridáme bootstrap.properties do src / main / resources:

spring.cloud.config.name = objav spring.cloud.config.uri = // localhost: 8081

Tieto vlastnosti umožnia vyhľadávaciemu serveru pri spustení dotaz na konfiguračný server.

A po druhé, pridáme objav.vlastnosti do nášho úložiska Git

spring.application.name = discovery server.port = 8082 eureka.instance.hostname = localhost eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka / eureka.client.register-with-eureka = false eureka.client. fetch-registry = false

Názov súboru sa musí zhodovať s spring.application.name nehnuteľnosť.

Tomuto serveru navyše hovoríme, že pracuje v predvolenej zóne, čo sa zhoduje s nastavením regiónu konfiguračného klienta. Tiež hovoríme serveru, aby sa neregistroval s inou inštanciou objavenia.

Vo výrobe by sme mali viac ako jeden z nich, ktorý by poskytoval nadbytočnosť v prípade poruchy a toto nastavenie by bolo pravdivé.

Poďme súbor odovzdať do úložiska Git. V opačnom prípade nebude súbor detekovaný.

3.4. Pridajte závislosť na serveri Config

Pridajte túto závislosť do súboru POM konfiguračného servera:

 org.springframework.cloud spring-cloud-starter-heureka 

Pre porovnanie, zväzok nájdeme na Maven Central (heuréka-klient).

Pridajte tieto vlastnosti do application.properties uložiť v src / main / resources konfiguračného servera:

eureka.client.region = predvolená eureka.client.registryFetchIntervalSeconds = 5 eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

3.5. Bež

Spustite vyhľadávací server pomocou rovnakého príkazu, mvn spring-boot: spustiť. Výstup z príkazového riadku by mal obsahovať:

Načítava sa konfigurácia zo servera na adrese: // localhost: 8081 ... Tomcat sa spustil na porte (s): 8082 (http)

Zastavte a znova spustite konfiguračnú službu. Ak je všetko v poriadku, výstup by mal vyzerať takto:

DiscoveryClient_CONFIG / 10.1.10.235: konfigurácia: 8081: registračná služba ... Tomcat spustený na porte (s): 8081 (http) DiscoveryClient_CONFIG / 10.1.10.235: konfigurácia: 8081 - stav registrácie: 204

4. Brána

Teraz, keď máme vyriešené problémy s konfiguráciou a objavovaním, máme stále problém s prístupom klientov ku všetkým našim aplikáciám.

Ak necháme všetko v distribuovanom systéme, potom budeme musieť spravovať zložité hlavičky CORS, aby sme klientom umožnili požiadavky krížového pôvodu. Môžeme to vyriešiť vytvorením servera brány. Funguje to ako reverzné proxy zasielanie požiadaviek klientov na naše servery typu back-end.

Server brány je vynikajúcou aplikáciou v architektúre mikroslužieb, pretože umožňuje, aby všetky odpovede pochádzali z jedného hostiteľa. To eliminuje potrebu CORS a poskytne nám pohodlné miesto na riešenie bežných problémov, ako je autentifikácia.

4.1. Nastaviť

Teraz už poznáme cvičenie. Prejdite na //start.spring.io. Nastavte artefakt na „bránu“. Vyhľadajte výraz „zuul“ a pridajte túto závislosť. Vyhľadajte „konfiguračný klient“ a pridajte túto závislosť. Vyhľadajte výraz „heureka discovery“ a pridajte túto závislosť. Nakoniec vygenerujte tento projekt.

Prípadne by sme mohli vytvoriť a Jarná topánka aplikácia s týmito závislosťami:

 org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka org.springframework.cloud spring-cloud-starter-zuul 

Pre porovnanie, zväzok nájdeme na Maven Central (config-client, eureka-client, zuul).

4.2. Jarná konfig

Pridajme konfiguráciu do hlavnej triedy:

@SpringBootApplication @EnableZuulProxy @EnableEurekaClient verejná trieda GatewayApplication {...}

4.3. Vlastnosti

Teraz pridáme dva súbory vlastností:

bootstrap.properties v src / main / resources:

spring.cloud.config.name = brána spring.cloud.config.discovery.service-id = konfigurácia spring.cloud.config.discovery.enabled = true eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

brána.vlastnosti v našom úložisku Git

spring.application.name = gateway server.port = 8080 eureka.client.region = predvolené eureka.client.registryFetchIntervalSeconds = 5 zuul.routes.book-service.path = / book-service / ** zuul.routes.book-service .sensitive-headers = Set-Cookie, Authorization hystrix.command.book-service.execution.isolation.thread.timeoutInMilliseconds = 600000 zuul.routes.rating-service.path = / rating-service / ** zuul.routes.rating- service.sensitive-headers = Set-Cookie, autorizácia hystrix.command.rating-service.execution.isolation.thread.timeoutInMilliseconds = 600000 zuul.routes.discovery.path = / discovery / ** zuul.routes.discovery.sensitive-headers = Set-Cookie, autorizácia zuul.routes.discovery.url = // localhost: 8082 hystrix.command.discovery.execution.isolation.thread.timeoutInMilliseconds = 600000

The zuul.routes property nám umožňuje definovať aplikáciu na smerovanie určitých požiadaviek na základe porovnávača mravcov URL. Naše ubytovanie hovorí Zuulovi, aby smeroval každú žiadosť, ktorá príde / knižná služba / ** k žiadosti s spring.application.name z knižná služba. Zuul potom vyhľadá hostiteľa z vyhľadávacieho servera pomocou názvu aplikácie a pošle požiadavku na tento server.

Nezabudnite vykonať zmeny v úložisku!

4.4. Bež

Spustite konfiguračné a vyhľadávacie aplikácie a počkajte, kým sa konfiguračná aplikácia zaregistruje na vyhľadávacom serveri. Ak sú už spustené, nemusíme ich reštartovať. Po dokončení spustite server brány. Server brány by mal začínať na porte 8080 a registrovať sa na serveri objavovania. Výstup z konzoly by mal obsahovať:

Načítava sa konfigurácia zo servera na adrese: //10.1.10.235:8081/ ... DiscoveryClient_GATEWAY / 10.1.10.235: brána: 8080: služba registrácie ... DiscoveryClient_GATEWAY / 10.1.10.235: brána: 8080 - stav registrácie: 204 Tomcat spustený na porte s: 8080 (http)

Jednou chybou, ktorú je ľahké urobiť, je spustenie servera pred tým, ako sa konfiguračný server zaregistruje na Eureke. V takom prípade uvidíme protokol s týmto výstupom:

Načítava sa konfigurácia zo servera na adrese: // localhost: 8888

Toto je predvolená adresa URL a port pre konfiguračný server a naznačuje, že naša služba zisťovania nemala adresu, keď bola zadaná požiadavka na konfiguráciu. Počkajte niekoľko sekúnd a skúste to znova. Po zaregistrovaní konfiguračného servera na serveri Eureka sa problém vyrieši.

5. Knižná služba

V architektúre mikroslužieb môžeme robiť toľko aplikácií, aby sme splnili obchodný cieľ. Inžinieri často rozdelia svoje služby podľa domén. Budeme postupovať podľa tohto vzoru a vytvoríme knižnú službu, ktorá bude spracovávať všetky operácie týkajúce sa kníh v našej aplikácii.

5.1. Nastaviť

Ešte raz. Prejdite na //start.spring.io. Nastavte artefakt na „knižnú službu“. Vyhľadajte „web“ a pridajte túto závislosť. Vyhľadajte „konfiguračný klient“ a pridajte túto závislosť. Vyhľadajte výraz „heureka discovery“ a pridajte túto závislosť. Vytvorte ten projekt.

Prípadne môžete do projektu pridať tieto závislosti:

 org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-web 

Pre porovnanie, zväzok nájdeme na Maven Central (config-client, eureka-client, web).

5.2. Jarná konfig

Upravme našu hlavnú triedu:

@SpringBootApplication @EnableEurekaClient @RestController @RequestMapping ("/ books") verejná trieda BookServiceApplication {public static void main (String [] args) {SpringApplication.run (BookServiceApplication.class, args); } private List bookList = Arrays.asList (nová kniha (1L, "Baeldung ide na trh", "Tim Schimandle"), nová kniha (2L, "Baeldung ide do parku", "Slavisa")); @GetMapping ("") verejný zoznam findAllBooks () {návrat bookList; } @GetMapping ("/ {bookId}") verejná kniha findBook (@PathVariable Long bookId) {return bookList.stream (). Filter (b -> b.getId (). Equals (bookId)). FindFirst (). OrElse (nulový); }}

Pridali sme tiež radič REST a pole nastavené v našom súbore vlastností, aby sme vrátili hodnotu, ktorú nastavíme počas konfigurácie.

Teraz pridajme knihu POJO:

verejná trieda Book {private Long id; súkromný autor reťazcov; súkromný názov reťazca; // štandardné getre a setre}

5.3. Vlastnosti

Teraz stačí pridať naše dva súbory vlastností:

bootstrap.properties v src / main / resources:

spring.cloud.config.name = knižná služba spring.cloud.config.discovery.service-id = konfigurácia spring.cloud.config.discovery.enabled = true eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

book-service.properties v našom úložisku Git:

spring.application.name = book-service server.port = 8083 eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

Vykonajme zmeny v úložisku.

5.4. Bež

Po spustení všetkých ostatných aplikácií môžeme spustiť knižnú službu. Výstup z konzoly by mal vyzerať takto:

DiscoveryClient_BOOK-SERVICE / 10.1.10.235: kniha-služba: 8083: služba registrácie ... DiscoveryClient_BOOK-SERVICE / 10.1.10.235: kniha-služba: 8083 - stav registrácie: 204 Tomcat spustený na porte (portoch): 8083 (http)

Len čo bude hotový, môžeme pomocou nášho prehliadača získať prístup k koncovému bodu, ktorý sme práve vytvorili. Prejdite na // localhost: 8080 / book-service / books a dostaneme späť objekt JSON s dvoma knihami, ktoré sme pridali do výstupného radiča. Všimnite si, že nepristupujeme ku knižnej službe priamo na porte 8083, ale prechádzame cez server brány.

6. Hodnotiaca služba

Rovnako ako naša knižná služba, aj naša hodnotiaca služba bude službou riadenou doménou, ktorá bude vybavovať operácie súvisiace s hodnotením.

6.1. Nastaviť

Ešte raz. Prejdite na //start.spring.io. Nastavte artefakt na „hodnotiacu službu“. Vyhľadajte „web“ a pridajte túto závislosť. Vyhľadajte „konfiguračný klient“ a pridajte túto závislosť. Hľadať objav heurek a pridať túto závislosť. Potom vygenerujte tento projekt.

Prípadne do projektu pridajte tieto závislosti:

 org.springframework.cloud spring-cloud-starter-config org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-web 

Pre porovnanie, zväzok nájdeme na Maven Central (config-client, eureka-client, web).

6.2. Jarná konfig

Upravme našu hlavnú triedu:

@SpringBootApplication @EnableEurekaClient @RestController @RequestMapping ("/ hodnotenie") verejná trieda RatingServiceApplication {public static void main (String [] args) {SpringApplication.run (RatingServiceApplication.class, args); } private List ratingList = Arrays.asList (nové hodnotenie (1L, 1L, 2), nové hodnotenie (2L, 1L, 3), nové hodnotenie (3L, 2L, 4), nové hodnotenie (4L, 2L, 5)); @GetMapping ("") verejný zoznam findRatingsByBookId (@RequestParam Dlhý bookId) bookId.equals (0L)? Collections.EMPTY_LIST: ratingList.stream (). Filter (r -> r.getBookId (). Equals (bookId)). Collect (Collectors.toList ()); @GetMapping ("/ all") public List findAllRatings () {návrat hodnotenieList; }}

Pridali sme tiež radič REST a pole nastavené v našom súbore vlastností, aby sme vrátili hodnotu, ktorú nastavíme počas konfigurácie.

Pridajme hodnotenie POJO:

public class Hodnotenie {private Long id; private Long bookId; súkromné ​​int hviezdy; // štandardné getre a setre}

6.3. Vlastnosti

Teraz stačí pridať naše dva súbory vlastností:

bootstrap.properties v src / main / resources:

spring.cloud.config.name = rating-service spring.cloud.config.discovery.service-id = config spring.cloud.config.discovery.enabled = true eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

hodnotenie-servis.vlastnosti v našom úložisku Git:

spring.application.name = rating-service server.port = 8084 eureka.client.region = predvolené eureka.client.registryFetchIntervalSeconds = 5 eureka.client.serviceUrl.defaultZone = // localhost: 8082 / eureka /

Vykonajme zmeny v úložisku.

6.4. Bež

Po spustení všetkých ostatných aplikácií môžeme spustiť hodnotiacu službu. Výstup z konzoly by mal vyzerať takto:

DiscoveryClient_RATING-SERVICE / 10.1.10.235: hodnotiaca služba: 8083: registračná služba ... DiscoveryClient_RATING-SERVICE / 10.1.10.235: hodnotiaca služba: 8083 - stav registrácie: 204 Tomcat spustený na porte (portoch): 8084 (http)

Len čo bude hotový, môžeme pomocou nášho prehliadača získať prístup k koncovému bodu, ktorý sme práve vytvorili. Prejdite na // localhost: 8080 / hodnotenie-služba / hodnotenie / všetko a my dostaneme späť JSON obsahujúci všetky naše hodnotenia. Všimnite si, že nepristupujeme k hodnotiacej službe priamo na porte 8084, ale prechádzame cez server brány.

7. Záver

Teraz sme schopní spojiť rôzne kúsky Spring Cloudu do fungujúcej aplikácie mikroslužieb. To vytvára základňu, ktorú môžeme použiť na začatie budovania zložitejších aplikácií.

Ako vždy, tento zdrojový kód nájdeme na GitHube.


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