Rövid útmutató a Spring Cloud Consulhoz

1. Áttekintés

A Spring Cloud Consul projekt egyszerű integrációt biztosít a Consulral a Spring Boot alkalmazásokhoz.

A Consul egy olyan eszköz, amely összetevőket kínál a mikroproblémák architektúrájának leggyakoribb kihívásainak megoldásához:

  • Service Discovery - a szolgáltatáspéldányok hálózati helyeinek automatikus regisztrálása és regisztrációjának törlése
  • Állapotellenőrzés - annak észlelésére, hogy a szolgáltatáspéldány fut-e
  • Elosztott konfiguráció - annak biztosítása, hogy az összes szolgáltatási példány ugyanazt a konfigurációt használja

Ebben a cikkben megnézzük, hogyan konfigurálhatjuk a Spring Boot alkalmazást ezen funkciók használatára.

2. Előfeltételek

Először is ajánlott egy gyors pillantást vetni a Consulra és annak minden szolgáltatására.

Ebben a cikkben egy futó Consul ügynököt fogunk használni helyi gazda: 8500. A Consul telepítésével és az ügynök futtatásával kapcsolatos további részletekért lásd ezt a linket.

Először hozzá kell adnunk a tavaszi felhő-kezdő-konzul-minden függőséget a sajátunkhoz pom.xml:

 org.springframework.cloud spring-cloud-starter-consul-all 1.3.0.FELHASZNÁLÁS 

3. Szolgáltatás felfedezése

Írjuk meg az első Spring Boot alkalmazást, és kössük össze a futó Consul ügynököt:

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

Alapértelmezés szerint a Spring Boot megpróbál csatlakozni a Consul ügynökhöz a (z) címen helyi gazda: 8500. Más beállítások használatához frissítenünk kell a alkalmazás.yml fájl:

tavasz: felhő: konzul: host: localhost port: 8500

Ezután, ha meglátogatjuk a Consul ügynök webhelyét a böngészőben a címen // localhost: 8500, látni fogjuk, hogy alkalmazásunkat megfelelően bejegyeztük a Consul-ba a (z) domain azonosítóval „$ {Spring.application.name}: $ {profilok vesszővel elválasztva}: $ {server.port}”.

Az azonosító testreszabásához frissítenünk kell a tulajdonságot tavasz.felhő.felfedezés.instanceId egy másik kifejezéssel:

tavasz: alkalmazás: név: myApp felhő: konzul: felfedezés: instanceId: $ {spring.application.name}: $ {random.value}

Ha újra futtatjuk az alkalmazást, látni fogjuk, hogy az azonosítóval regisztrálták „MyApp” plusz egy véletlenszerű érték. Erre szükségünk van az alkalmazásunk több példányának futtatásához a helyi gépünkön.

Végül, a Service Discovery letiltásához be kell állítanunk a tulajdonságot tavasz.felhő.konzul.felfedezés.engedélyezve nak nek hamis.

3.1. Szolgáltatások keresése

Az alkalmazásunkat már regisztráltuk a Consulban, de hogyan találják meg az ügyfelek a szolgáltatás végpontjait? Szükségünk van egy felfedező kliens szolgáltatásra, hogy futó és elérhető szolgáltatást kapjunk a Consul-tól.

A tavasz biztosítja a DiscoveryClient API ezért, amelyet a @EnableDiscoveryClient kommentár:

@SpringBootApplication @EnableDiscoveryClient nyilvános osztály DiscoveryClientApplication {// ...}

Ezután beadhatjuk a DiscoveryClient be a vezérlőnkbe, és elérheti a példányokat:

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

Végül meghatározzuk az alkalmazás végpontjainkat:

A @GetMapping ("/ discoveryClient") nyilvános karakterlánc a discoveryPing () a RestClientException, a ServiceUnavailableException {URI service = serviceUrl () .map (s -> s.resolve ("/ ping")) dobja. VagyElseThrow (ServiceUnavailableException :: new); return restTemplate.getForEntity (szolgáltatás, String.osztály) .getBody (); } @GetMapping ("/ ping") public String ping () {return "pong"; }

A „MyApp / ping” elérési útja a tavaszi alkalmazás neve a szolgáltatás végpontjával. A konzul biztosítja az összes elérhető alkalmazás megnevezését „MyApp”.

4. Egészségellenőrzés

A konzul rendszeresen ellenőrzi a szolgáltatás végpontjainak állapotát.

Alapértelmezés szerint, A tavasz a visszatérés érdekében végrehajtja az egészségügyi végpontot 200 OK ha az alkalmazás fent van. Ha testreszabni akarjuk a végpontot, frissítenünk kell a application.yml:

tavasz: felhő: konzul: felfedezés: healthCheckPath: / my-health-check healthCheckInterval: 20s

Ennek eredményeként a konzul megkérdezi a kérdést „/ Egészségem ellenőrzése” 20 másodpercenként végpont.

Határozzuk meg egyedi állapotfelmérési szolgáltatásunkat a TILTOTT állapot:

@GetMapping ("/ my-health-check") public ResponseEntity myCustomCheck () {String message = "A healh check funkció tesztelése" return new ResponseEntity (üzenet, HttpStatus.FORBIDDEN); }

Ha a Consul-ügynök webhelyére megyünk, látni fogjuk, hogy az alkalmazásunk sikertelen. Ennek kijavítására a „/ Egészségem ellenőrzése” szolgáltatásnak vissza kell adnia a HTTP-t 200 OK állapotkód.

5. Elosztott konfiguráció

Ez a funkció lehetővé teszi a konfiguráció szinkronizálását az összes szolgáltatás között. A konzul figyelni fogja az esetleges konfigurációs változásokat, majd elindítja az összes szolgáltatás frissítését.

Először hozzá kell adnunk a spring-cloud-starter-consul-config függőséget pom.xml:

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

A Consul és a Spring alkalmazásnév beállításait is áthelyeznünk kell a alkalmazás.yml fájl a bootstrap.yml fájl, amelyet a Spring tölt be először.

Ezután engedélyeznünk kell a Spring Cloud Consul Config szolgáltatást:

tavasz: alkalmazás: név: myApp felhő: konzul: gazdagép: localhost port: 8500 konfig: engedélyezve: igaz

A Spring Cloud Consul Config a Consul területén lévő ingatlanokat keresi meg „/ Config / myApp”. Tehát, ha van egy úgynevezett ingatlanunk „My.prop”, létre kell hoznunk ezt a tulajdonságot a Consul ügynök webhelyén.

Az ingatlant úgy hozhatjuk létre, hogy felkeressük a "KULCS ÉRTÉK" szakasz, majd belépés „/ Config / myApp / my / prop” ban,-ben „Kulcs létrehozása” forma és "Helló Világ" mint érték. Végül kattintson a gombra "Teremt" gomb.

Ne feledje, hogy ha Spring profilokat használunk, hozzá kell fűznünk a profilokat a Spring alkalmazás neve mellé. Például, ha a dev profiljában a Consulban az utolsó út lesz “/ Config / myApp, dev”.

Most nézzük meg, hogy néz ki a vezérlőnk az injektált tulajdonságokkal:

@RestController public class DistributedPropertiesController {@Value ("$ {my.prop}") Karakterlánc értéke; @Autowired privát MyProperties tulajdonságok; @GetMapping ("/ getConfigFromValue") public String getConfigFromValue () {return value; } @GetMapping ("/ getConfigFromProperty") public String getConfigFromProperty () {return properties.getProp (); }}

És a MyProperties osztály:

@RefreshScope @Configuration @ConfigurationProperties ("én") nyilvános osztály MyProperties {private String prop; // standard getter, setter}

Ha futtatjuk az alkalmazást, akkor a mezőt érték és tulajdonságait legyen ugyanaz "Helló Világ" érték a konzultól.

5.1. A konfiguráció frissítése

Mi a helyzet a konfiguráció frissítésével a Spring Boot alkalmazás újraindítása nélkül?

Ha visszatérünk a Consul ügynök webhelyére, és frissítjük az ingatlant „/ Config / myApp / my / prop” más olyan értékkel, mint „Új Hello világ”, majd a mező érték nem változik és a mező tulajdonságait frissítve lesz erre: „Új Hello világ” a várakozásoknak megfelelően.

Ez azért van, mert a mező tulajdonságait egy MyProperties osztály rendelkezik a @RefreshScope annotáció. Az összes babot a @RefreshScope a jegyzet frissül a konfiguráció módosítása után.

A való életben nem szabad, hogy közvetlenül a Consulban rendelkezzünk a tulajdonságokkal, hanem valahol tartósan tároljuk. Ezt megtehetjük egy Config Server használatával.

6. Következtetés

Ebben a cikkben azt láthattuk, hogyan állíthatjuk be a Spring Boot alkalmazásokat a Consul szolgáltatással való szolgáltatásfelderítés céljából történő együttműködésére, az állapotellenőrzési szabályok testreszabására és az elosztott konfiguráció megosztására.

Számos megközelítést vezettünk be az ügyfelek számára is, hogy felhívják ezeket a regisztrált szolgáltatásokat.

Szokás szerint a források a GitHubon találhatók.