Stručný sprievodca pre Spring Cloud Consul

1. Prehľad

Projekt Spring Cloud Consul poskytuje ľahkú integráciu s aplikáciami Consul pre Spring Boot.

Consul je nástroj, ktorý poskytuje komponenty na riešenie niektorých najbežnejších výziev v architektúre mikroslužieb:

  • Zistenie služby - na automatickú registráciu a zrušenie registrácie sieťových umiestnení inštancií služieb
  • Kontrola stavu - na zistenie, kedy je inštancia služby funkčná
  • Distribuovaná konfigurácia - aby sa zabezpečilo, že všetky inštancie služby používajú rovnakú konfiguráciu

V tomto článku uvidíme, ako môžeme nakonfigurovať aplikáciu Spring Boot na používanie týchto funkcií.

2. Predpoklady

Na úvod sa odporúča rýchlo sa pozrieť na konzulu a všetky jeho funkcie.

V tomto článku budeme používať bežného agenta konzula localhost: 8500. Viac podrobností o tom, ako nainštalovať konzolu a spustiť agenta, nájdete na tomto odkaze.

Najskôr si do našej budeme musieť pridať závislosť jar-oblak-štartér-konzul-všetko pom.xml:

 org.springframework.cloud spring-cloud-starter-consul-all 1.3.0.RELEASE 

3. Zistenie služby

Poďme napísať našu prvú aplikáciu Spring Boot a spojiť sa s bežiacim agentom Consul:

@SpringBootApplication verejná trieda ServiceDiscoveryApplication {public static void main (String [] args) {new SpringApplicationBuilder (ServiceDiscoveryApplication.class) .web (true) .run (args); }}

V predvolenom nastavení sa Spring Boot pokúsi pripojiť k agentovi konzula na adrese localhost: 8500. Ak chcete použiť ďalšie nastavenia, je potrebné aktualizovať aplikácia.yml spis:

jar: mrak: konzul: hostiteľ: port localhost: 8500

Potom, ak navštívime stránku agenta konzula v prehliadači na adrese // localhost: 8500, uvidíme, že naša aplikácia bola v konzule správne zaregistrovaná s identifikátorom z „$ {Spring.application.name}: $ {profiles separated by comma}: $ {server.port}".

Ak chcete prispôsobiť tento identifikátor, musíme aktualizovať vlastníctvo spring.cloud.discovery.instanceId s iným výrazom:

spring: application: name: myApp cloud: consul: discovery: instanceId: $ {spring.application.name}: $ {random.value}

Ak aplikáciu znova spustíme, uvidíme, že bola zaregistrovaná pomocou identifikátora „MyApp“ plus náhodná hodnota. Potrebujeme to na spustenie viacerých inštancií našej aplikácie na našom lokálnom počítači.

Nakoniec Ak chcete zakázať zisťovanie služieb, musíme nastaviť vlastnosť jar.oblak.konzul.discovery.zapnut do nepravdivé.

3.1. Vyhľadávacie služby

Na Consul už máme našu aplikáciu zaregistrovanú, ale ako môžu klienti nájsť koncové body služby? Potrebujeme službu vyhľadávacieho klienta, aby sme mohli získať bežnú a dostupnú službu od spoločnosti Consul.

Jar poskytuje a DiscoveryClient API pre to, ktoré môžeme povoliť pomocou @EnableDiscoveryClient anotácia:

@SpringBootApplication @EnableDiscoveryClient verejná trieda DiscoveryClientApplication {// ...}

Potom môžeme podať injekciu DiscoveryClient fazuľa do nášho kontrolóra a prístup k inštanciám:

@RestController verejná trieda DiscoveryClientController {@Autowired private DiscoveryClient discoveryClient; public Optional serviceUrl () {return discoveryClient.getInstances ("myApp") .stream () .findFirst () .map (si -> si.getUri ()); }}

Na záver definujeme naše koncové body aplikácie:

@GetMapping ("/ discoveryClient") public String discoveryPing () hodí RestClientException, ServiceUnavailableException {URI service = serviceUrl () .map (s -> s.resolve ("/ ping")) .orElseThrow (ServiceUnavailableException :: new); return restTemplate.getForEntity (service, String.class) .getBody (); } @GetMapping ("/ ping") public String ping () {return "pong"; }

The „MyApp / ping“ path je názov jarnej aplikácie s koncovým bodom služby. Konzul poskytne všetky dostupné pomenované aplikácie „MyApp“.

4. Kontrola stavu

Konzul pravidelne kontroluje zdravie koncových bodov služby.

Predvolene, Jar implementuje koncový bod zdravia, ktorý sa má vrátiť 200 OK ak je aplikácia hore. Ak chceme prispôsobiť koncový bod, musíme aktualizovať application.yml:

jar: cloud: konzul: objav: healthCheckPath: / moje-zdravie-check healthCheckInterval: 20s

Dôsledkom toho bude, že sa konzul bude hlasovať pre „/ Moja-zdravotna-kontrola“ koncový bod každých 20 sekúnd.

Definujme našu vlastnú službu kontroly stavu, aby sme vrátili a ZAKÁZANÉ postavenie:

@GetMapping ("/ my-health-check") public ResponseEntity myCustomCheck () {String message = "Testovanie mojej funkcie kontroly uzdravenia"; vrátiť novú ResponseEntity (správa, HttpStatus.FORBIDDEN); }

Ak pôjdeme na stránku agentov konzulov, uvidíme, že naša aplikácia zlyháva. Ak to chcete opraviť, „/ Moja-zdravotna-kontrola“ služba by mala vrátiť HTTP 200 OK stavový kód.

5. Distribuovaná konfigurácia

Táto vlastnosť umožňuje synchronizáciu konfigurácie medzi všetkými službami. Consul bude sledovať všetky zmeny v konfigurácii a potom spustí aktualizáciu všetkých služieb.

Najprv musíme do našej pridať závislosť spring-cloud-starter-consul-config pom.xml:

 org.springframework.cloud spring-cloud-starter-consul-config 1.3.0.RELEASE 

Musíme tiež presunúť nastavenia názvu aplikácie Consul a Spring z aplikácia.yml súbor do bootstrap.yml súbor, ktorý Spring načíta ako prvý.

Potom musíme povoliť Spring Cloud Consul Config:

jar: aplikácia: názov: cloud myApp: konzul: hostiteľ: port localhost: 8500 konfigurácia: povolená: pravda

Spring Cloud Consul Config bude hľadať nehnuteľnosti v Consul na adrese „/ Config / myApp“. Ak teda máme nehnuteľnosť tzv „My.prop“, potrebovali by sme vytvoriť túto vlastnosť na stránke agentov konzulov.

Majetok môžeme vytvoriť prechodom na „KĽÚČ / HODNOTA“ oddiel, potom vstúpte „/ Config / myApp / my / prop“ v „Vytvoriť kľúč“ forma a „Hello World“ ako hodnota. Nakoniec kliknite na ikonu „Vytvoriť“ tlačidlo.

Majte na pamäti, že ak používame jarné profily, musíme pridať profily vedľa názvu jarnej aplikácie. Napríklad, ak používame dev profilu, bude posledná cesta v Consul „/ Config / myApp, dev“.

Teraz sa pozrime, ako vyzerá náš radič s vloženými vlastnosťami:

@RestController verejná trieda DistributedPropertiesController {@Value ("$ {my.prop}") Hodnota reťazca; @Autowired súkromné ​​vlastnosti MyProperties; @GetMapping ("/ getConfigFromValue") public String getConfigFromValue () {návratová hodnota; } @GetMapping ("/ getConfigFromProperty") public String getConfigFromProperty () {return properties.getProp (); }}

A Moje vlastnosti trieda:

@RefreshScope @Configuration @ConfigurationProperties ("my") verejná trieda MyProperties {private String prop; // štandardný getter, setter}

Ak spustíme aplikáciu, pole hodnotu a vlastnosti mať to isté „Hello World“ hodnota od konzula.

5.1. Aktualizácia konfigurácie

Čo aktualizácia konfigurácie bez reštartovania aplikácie Spring Boot?

Ak sa vrátime na stránku agentov konzulov a aktualizujeme vlastníctvo „/ Config / myApp / my / prop“ s inou hodnotou ako „New Hello World“, potom pole hodnotu sa nezmení a pole vlastnosti bude aktualizovaný na „New Hello World“ podľa očakávania.

Je to tak kvôli poli vlastnosti je a Moje vlastnosti trieda má @RefreshScope anotácia. Všetky fazule s poznámkou @RefreshScope anotácia sa obnoví po zmenách konfigurácie.

V reálnom živote by sme nemali mať nehnuteľnosti priamo v konzule, ale mali by sme ich niekde trvale skladovať. Môžeme to urobiť pomocou servera Config.

6. Záver

V tomto článku sme videli, ako nastaviť naše aplikácie Spring Boot na prácu s konzulom na účely zisťovania služieb, ako prispôsobiť pravidlá kontroly stavu a zdieľať distribuovanú konfiguráciu.

Taktiež sme zaviedli niekoľko prístupov pre klientov k vyvolaniu týchto registrovaných služieb.

Ako obvykle, zdroje nájdete na GitHub.


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