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:

  1. hozzátéve tavasz-felhő-indító-netflix-eureka-szerver a függőségekhez
  2. engedélyezze az Eureka szervert a @SpringBootApplication azzal annotálva @EnableEurekaServer
  3. 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.