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.