Bevezetés a Spring Cloud Netflixbe - Eureka
1. Áttekintés
Ebben az oktatóanyagban bemutatjuk ügyféloldali szolgáltatás felfedezés a „Tavaszi Felhő Netflix Eureka“.
Ügyféloldali szolgáltatás felfedezése lehetővé teszi a szolgáltatások számára, hogy kemény kódolással gazdagépnevet és portot találjanak egymással és kommunikáljanak egymással. Az egyetlen „fix pont” egy ilyen architektúrában a szolgáltatásnyilvántartás amelyhez minden szolgáltatásnak regisztrálnia kell.
Hátránya, hogy minden ügyfélnek meg kell valósítania egy bizonyos logikát, hogy kölcsönhatásba léphessen ezzel a fix ponttal. Ez feltételez egy további hálózati oda-vissza utat a tényleges kérés előtt.
A Netflix Eureka segítségével minden kliens egyidejűleg szolgálhat szerverként, hogy megismételje állapotát egy csatlakoztatott társnak. Más szavakkal, az ügyfél lekér egy listát a szolgáltatásnyilvántartás és minden további szolgáltatást igényel minden más szolgáltatáshoz terheléselosztó algoritmuson keresztül.
Ahhoz, hogy tájékoztatást kapjanak az ügyfél jelenlétéről, szívdobogásjelet kell küldenie a nyilvántartónak.
Ennek az írásnak a célja elérése érdekében hármat valósítunk meg mikroszolgáltatások:
- a szolgáltatásnyilvántartás (Eureka Server),
- a PIHENÉS szolgálat, amely regisztrálja magát a nyilvántartásba (Eureka Ügyfél) és
- egy webalkalmazás, amely a PIHENÉS szolgáltatás, mint nyilvántartás-tudatos ügyfél (Tavaszi Felhő Netflix Feign Client).
2. Eureka Server
Megvalósítása a Eureka Server a szolgáltatás-nyilvántartáshoz olyan egyszerű, mint:
- hozzátéve tavasz-felhő-indító-netflix-eureka-szerver a függőségekhez
- engedélyezze az Eureka szervert a @SpringBootApplication azzal annotálva @EnableEurekaServer
- konfiguráljon néhány tulajdonságot
De lépésről lépésre megtesszük.
Először létrehozunk egy új Maven projektet, és beletesszük a függőségeket. Észre kell vennie, hogy importáljuk a tavasz-felhő-kezdő-szülő az ebben az oktatóanyagban leírt összes projektre:
org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-starter-parent Greenwich. KÖZLEMÉNY
Megjegyzés: A Spring Cloud legújabb kiadásait a Spring's Projects dokumentációjában ellenőrizhetjük.
Ezután létrehozzuk a fő alkalmazásosztályt:
@SpringBootApplication @EnableEurekaServer nyilvános osztály EurekaServerApplication {public static void main (String [] args) {SpringApplication.run (EurekaServerApplication.class, args); }}
Végül itt konfiguráljuk a tulajdonságokat YAML formátum; tehát egy alkalmazás.yml lesz a konfigurációs fájlunk:
szerver: port: 8761 eureka: kliens: registerWithEureka: false fetchRegistry: hamis
Itt konfigurálunk egy alkalmazásportot - 8761 az alapértelmezett Eureka szerverek. A beépítettnek mondjuk Eureka Ügyfél ne regisztráljon a „maga” oldalán, mert alkalmazásunknak szerverként kell működnie.
Most a // localhost: 8761-re mutatjuk a böngészőnket a Eureka irányítópult, ahol később megvizsgáljuk a regisztrált példányokat.
Jelenleg olyan alapvető mutatókat látunk, mint az állapot és az egészségi állapot.

3. Eureka Ügyfél
A @SpringBootApplication hogy felfedezés-tudatos legyünk, be kell vonnunk néhányat Tavaszi felfedezés kliens (például tavasz-felhő-kezdő-netflix-eureka-kliens) be a mi osztályút.
Ezután meg kell jegyeznünk a @ Konfiguráció akármelyikkel @EnableDiscoveryClient vagy @EnableEurekaClient - vegye figyelembe, hogy ez a megjegyzés nem kötelező, ha megvan a tavasz-felhő-kezdő-netflix-eureka-kliens osztályfutástól való függőség.
Ez utóbbi elmondja Tavaszi csizma hogy a Spring Netflix Eureka szolgáltatást kifejezetten felhasználja. Ahhoz, hogy ügyfélalkalmazásunk valamilyen minta-élettartammal töltse ki, a következőket is tartalmazza: tavasz-boot-starter-web csomag a pom.xml és végrehajtja a PIHENÉS vezérlő.
De először hozzáadjuk a függőségeket. Megint hagyhatjuk a tavasz-felhő-kezdő-szülő függőség az artefakt változatok számunkra való kitalálásához:
org.springframework.cloud spring-cloud-starter-netflix-eureka-starter org.springframework.boot spring-boot-starter-web
Itt fogjuk megvalósítani a fő alkalmazásosztályt:
@SpringBootApplication @RestController nyilvános osztály EurekaClientApplication valósítja meg GreetingController {@Autowired @Lazy privát EurekaClient eurekaClient; @Value ("$ {spring.application.name}") privát karakterlánc appName; public static void main (String [] args) {SpringApplication.run (EurekaClientApplication.class, args); } @Orride public String greeting () {return String.format ("Hello from '% s'!", EurekaClient.getApplication (appName) .getName ()); }}
És a GreetingController felület:
nyilvános felület GreetingController {@RequestMapping ("/ greeting") String köszönés (); }
Itt az interfész helyett egyszerűen deklarálhatnánk a térképet is a EurekaClientApplication osztály. A felület hasznos lehet, ha meg akarjuk osztani a szerver és az ügyfél között.
Ezután fel kell állítanunk egy alkalmazás.yml egy konfigurált Tavaszi alkalmazás neve az ügyfelünk egyedi azonosításához a regisztrált alkalmazások listáján.
Hagyhatjuk Tavaszi csizma válasszon nekünk véletlenszerű portot, mert később a nevével férünk hozzá ehhez a szolgáltatáshoz.
Végül el kell mondanunk ügyfelünknek, hogy hol kell megtalálni a nyilvántartást:
tavasz: alkalmazás: név: spring-cloud-eureka-kliens szerver: port: 0 eureka: client: serviceUrl: defaultZone: $ {EUREKA_URI: // localhost: 8761 / eureka} példány: preferIpAddress: true
Amikor úgy döntöttünk, hogy ilyen módon hozzuk létre az Eureka Ügyfelünket, arra gondoltunk, hogy az ilyen típusú szolgáltatásnak később könnyen skálázhatónak kell lennie.
Most futtatjuk az ügyfelet, és a böngészőnkre mutatunk // localhost: 8761 ismét, hogy lássa regisztrációjának állapotát az Eureka Irányítópulton. Az Irányítópult használatával további konfigurálást tehetünk pl. linkelje egy regisztrált ügyfél honlapját az Irányítópultra adminisztrációs célokra. A konfigurációs lehetőségek azonban túlmutatnak a cikk keretein.

4. Feign Client
A projektünk három függő mikroszolgáltatással történő befejezéséhez most megvalósítjuk a PIHENÉS- webes alkalmazás használata Tavaszi Netflix Feign kliens.
Gondol Kitalál mint felfedezés-tudatos TavasziRestTemplate interfészek használata a végpontokkal való kommunikációhoz. Ez az interfész futás közben és helyett automatikusan megvalósításra kerül szolgáltatási URL-ek, azt használja szolgáltatásnevek.
Nélkül Kitalál automatikus példányt kellene adnunk EurekaClient vezérlőnkbe, amellyel szolgáltatás-információt kaphatnánk szolgáltatás neve mint egy Alkalmazás tárgy.
Ezt használnánk Alkalmazás A szolgáltatás összes példányának felsorolásához válassza ki a megfelelőt, és használja ezt Példányinformáció hogy megkapja a gazdagép nevét és a portot. Ezzel bármelyikkel megtehetjük a szokásos kérést http kliens.
Például:
@Autowired privát EurekaClient eurekaClient; public void doRequest () {Application application = eurekaClient.getApplication ("spring-cloud-eureka-client"); InstanceInfo instanceInfo = application.getInstances (). Get (0); Karakterlánc hosztnév = instanceInfo.getHostName (); int port = instanceInfo.getPort (); // ...}
A RestTemplate a hozzáféréshez is használható Eureka ügyfél-szolgáltatások név szerint, de ez a téma túlmutat ezen az íráson.
A mi felállításához Feign Client a következő négy függőséget adjuk hozzá pom.xml:
org.springframework.cloud spring-cloud-starter-feign org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter -thymeleaf
A Feign Client található a tavasz-felhő-kezdő-színlelő csomag. Engedélyezéséhez fel kell tüntetnünk a @ Konfiguráció val vel @EnableFeignClients. Használatához egyszerűen fel kell tüntetnünk egy interfészt a @FeignClient („szolgáltatásnév”) és automatikusan bekötni egy vezérlőbe.
Jó módszer ilyenek létrehozására KitalálÜgyfelek az, hogy interfészeket hozzunk létre a @RequestMapping jegyzetekkel ellátott módszereket, és külön modulba rakja őket. Így megoszthatók a szerver és az ügyfél között. Kiszolgálói oldalon ezeket megvalósíthatja @Vezérlő, kliens oldalon pedig kiterjeszthetők és annotálhatók @FeignClient.
Továbbá a tavasz-felhő-kezdő-eureka csomag be kell vonni a projektbe és engedélyezni kell azzal, hogy a fő alkalmazásosztályt a @EnableEurekaClient.
A tavasz-boot-starter-web és tavaszi-bakancs-indító-timeleaf függőségeket használunk egy nézet bemutatására, amely a mi adataiból származik PIHENÉS szolgáltatás.
Ez lesz a miénk Feign Client felület:
@FeignClient ("spring-cloud-eureka-client") nyilvános felület GreetingClient {@RequestMapping ("/ greeting") String köszönés (); }
Itt fogjuk megvalósítani a fő alkalmazásosztályt, amely egyidejűleg vezérlőként működik:
@SpringBootApplication @EnableFeignClients @Controller nyilvános osztály FeignClientApplication {@Autowired private GreetingClient greetingClient; public static void main (String [] args) {SpringApplication.run (FeignClientApplication.class, args); } @RequestMapping ("/ get-greeting") public String greeting (Model model) {model.addAttribute ("greeting", greetingClient.greeting ()); visszatér "üdvözlő nézet"; }}
Ez lesz a HTML sablon a nézetünkhöz:
Üdvözlő oldal
Legalábbis a alkalmazás.yml konfigurációs fájl majdnem ugyanaz, mint az előző lépésben:
tavasz: alkalmazás: név: spring-cloud-eureka-feign-kliens szerver: port: 8080 eureka: client: serviceUrl: defaultZone: $ {EUREKA_URI: // localhost: 8761 / eureka}
Most ki tudjuk építeni és futtatni ezt a szolgáltatást. Végül a böngészőnkre mutatunk rá // localhost: 8080 / get-greeting és a következőket kell megjelenítenie:
Üdvözlet a SPRING-CLOUD-EUREKA-CLIENT-től!
5. ‘TransportException: Nem tudja végrehajtani a kérelmet bármely ismert kiszolgálón '
Az Eureka szerver futtatása során gyakran találkozunk olyan kivételekkel, mint:
com.netflix.discovery.shared.transport.TransportException: Nem lehet végrehajtani a kérelmet egyetlen ismert szerveren sem
Alapvetően ez a helytelen konfiguráció miatt történik alkalmazás.tulajdonságok vagy alkalmazás.yml. Eureka két tulajdonságot biztosít az ügyfél számára, amelyek konfigurálhatók.
- registerWithEureka: Ha ezt a tulajdonságot úgy csináljuk igaz majd a szerver indításakor a beépített kliens megpróbálja regisztrálni magát az Eureka szerveren.
- fetchRegistry: A beépített kliens megpróbálja letölteni a Eureka regisztráció, ha ezt a tulajdonságot igaznak konfiguráljuk.
Most amikor elindítjuk az Eureka szervert, nem akarjuk regisztrálni a beépített klienst, hogy konfigurálja magát a szerverrel.
Ha a fenti tulajdonságokat úgy jelöljük meg igaz (vagy ne konfigurálja őket úgy, ahogy vannak igaz alapértelmezés szerint) a szerver indítása közben a beépített kliens megpróbálja regisztrálni magát a Eureka szervert, és megpróbálja beolvasni a még nem elérhető nyilvántartást. Ennek eredményeként megkapjuk TransportException.
Ezért soha nem szabad ezeket a tulajdonságokat úgy konfigurálni igaz ban,-ben Eureka szerver alkalmazások. A helyes beállításokat kell beírni alkalmazás.yml az alábbiak:
eureka: client: registerWithEureka: false fetchRegistry: hamis
6. Következtetés
Mint láttuk, most már képesek vagyunk egy szolgáltatásnyilvántartás használatával megvalósítani Tavaszi Netflix Eureka Server és regisztráljon néhányat Eureka ügyfelek ezzel.
Mert a mi Eureka Ügyfél a 3. lépéstől kezdve véletlenszerűen kiválasztott porton hallgatja, a rendszerleíró adatbázis információi nélkül nem tudja a helyét. Val,-vel Feign Client és a regisztrációnk alapján megtalálhatjuk és elfogyaszthatjuk a PIHENÉS szolgáltatás még akkor is, ha a hely változik.
Végül nagy képet kaptunk arról, hogy miként lehet a szolgáltatás felfedezését mikroszolgáltatási architektúrában használni.
Szokás szerint megtalálja a forrásokat a GitHubon, amely egy sor készletet is tartalmaz Dokkmunkáskapcsolatos fájlok a dokkoló-ír hogy konténereket hozzunk létre a projektünkből.