Articles

Spring Cloud Service Discovery med Netflix Eureka

lär dig att skapa mikroservice, baserat på Spring cloud, på Netflix Eureka registry server och hur andra mikrotjänster (Eureka-klienter) använder den för att registrera och upptäcka tjänster för att ringa sina API: er.

Vi kommer att använda Spring Boot baserat Spring Cloud API. Vi kommer att använda Netflix Eureka server för att bygga service registry server och Eureka-klienter som registrerar sig själva och upptäcker andra tjänster för att ringa REST API: er.

översikt

Vi kommer att skapa tre mikrotjänster för detta Netflix Eureka-exempel.

  1. Eureka Service Registry Server – denna mikroservice kommer att tillhandahålla tjänsten registret och discovery server.
  2. Studentmikroservice-som ger viss funktionalitet baserad på Studentenheten. Det kommer att vara en rest-baserad tjänst och viktigast av allt kommer det att vara en Eureka-kundservice, som kommer att prata med Eureka-tjänsten för att registrera sig i serviceregistret.
  3. Skolmikroservice-samma typ som Studenttjänst-bara tillagd funktion är att den kommer att åberopa Studenttjänst med serviceuppslagningsmekanism. Vi kommer inte att använda den absoluta webbadressen till studenttjänsten för att interagera med den tjänsten.

här är interaktionsdiagrammet mellan ovan listade tre tjänster.

Komponentinteraktion med varandra

Tech Stack och Runtime

  • Java 1.8
  • Eclipse IDE
  • Spring cloud
  • Spring boot
  • Spring Rest
  • Maven
Table of ContentsWhat is Netflix Eureka Server and Clients?Eureka Service Registry ServerEureka Client - Student ServiceEureka Client - School ServiceDemo of Service Discovery and CallingThings to check if facing any errorSummary

Vad är Netflix Eureka Server och klienter?

som vi vet idag finns det mycket fart kring mikrotjänster. Övergången från monolitisk till Mikroservicebaserad arkitektur ger många fördelar för framtiden när det gäller underhåll, skalbarhet, hög tillgänglighet etc. Men samtidigt finns det många utmaningar också när man gör denna migration. En av dem är att upprätthålla enskilda mikroserviceadresser. Denna uppgift kan vara enormt komplex-beroende på antal tjänster och deras dynamiska karaktär. Om hela infrastrukturen distribueras och det finns en viss replikering också, blir det svårare att behålla dessa serviceadresser.

för att lösa detta finns det i den distribuerade datorn ett koncept som kallas ’Serviceregistrering och upptäckt’ där en dedikerad server är ansvarig för att upprätthålla registret för all Mikroservice som har distribuerats och tagits bort. Detta kommer att fungera som en telefonbok för alla andra applikationer/mikrotjänster.

Tänk på det som en uppslagstjänst där mikrotjänster (klienter) kan registrera sig och upptäcka andra registrerade mikrotjänster. När en klientmikroservice registrerar sig hos Eureka tillhandahåller den metadata som värd, port och hälsoindikator, vilket gör det möjligt för andra mikrotjänster att upptäcka det. Discovery-servern förväntar sig ett regelbundet hjärtslagsmeddelande från varje mikroserviceinstans. Om en instans börjar konsekvent misslyckas med att skicka ett hjärtslag, tar discovery-servern bort instansen från sitt register. På så sätt kommer vi att ha ett mycket stabilt ekosystem av mikrotjänster som samarbetar med varandra, och ovanpå det behöver vi inte manuellt behålla adressen till annan Mikroservice, vilket är en näst intill omöjlig uppgift om skalan upp/ner är mycket frekvent, på begäran och vi använder virtual host för att vara värd för tjänsterna speciellt i molnmiljön.

Eureka Service Registry Server

följ dessa steg för att skapa och köra Eureka server.

skapa Eureka Server

skapa ett Spring boot-projekt från Spring Boot initializer portal med två beroenden, dvs. Eureka server och Actuator. Ge andra Maven GAV koordinater och ladda ner projektet.

Eureka Server Service Project Generation

packa upp och importera projektet till Eclipse som befintligt maven-projekt. I det här steget kommer alla nödvändiga beroenden att laddas ner från maven repository.

Öppna nuSpringEurekaServerApplication klass som våren redan har genererat i det nedladdade projektet och Lägg till@EnableEurekaServerannotering på klassen.

package com.example.howtodoinjava.springeurekaserver; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer@SpringBootApplicationpublic class SpringEurekaServerApplication { public static void main(String args) { SpringApplication.run(SpringEurekaServerApplication.class, args); }}

Bygg projektet igen. Med denna anteckning kommer denna artefakt att fungera som MicroService registry och discovery server.

serverkonfiguration

skapa en fil som heterapplication.yml i katalogensrc\main\resources. Lägg till dessa egenskaper –

server: port: ${PORT:8761} # Indicate the default PORT where this service will be startedeureka: client: registerWithEureka: false#telling the server not to register himself in the service registry fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0#wait time for subsequent sync

skapa en annan fil som heter bootstrap.yml i katalogen src\main\resources. Lägg till dessa egenskaper –

spring: application: name: eureka cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}

Test Eureka Server

starta applikationen som spring boot-applikation. Öppna webbläsaren och gå till , du bör se Eureka server hemsida som ser ut nedan.

Eureka Console utan någon klient

Observera att vid denna tidpunkt ingen tjänst registreras här som förväntas och när vi kommer att snurra upp klienttjänsterna uppdateras denna server automatiskt med detaljerna av kundtjänsterna.

Eureka Client – Student Service

följ dessa steg för att skapa och köra Eureka client running student service.

skapa Eureka Client Project

skapa ett Spring boot-projekt från initializer portal med fyra beroenden, dvsActuatorWebRest RepositoriesEureka Discovery. Ge andra Maven GAV koordinater och ladda ner projektet.

Klientprojektgenerering –
Studentmikroservice

packa upp och importera projektet till Eclipse som befintligt maven-projekt.

lägg nu till@EnableEurekaClient annotation på Spring boot application class som finns isrc mapp. Med denna anteckning kommer denna artefakt att fungera som en spring discovery-klient och kommer att registrera sig i Eureka-servern som är ansluten till denna tjänst.

package com.example.howtodoinjava.springeurekaclientstudentservice; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientStudentServiceApplication { public static void main(String args) { SpringApplication.run(SpringEurekaClientStudentServiceApplication.class, args); }}

klientkonfiguration

skapa en fil som heter application.yml i katalogen src\main\resources och Lägg till rader nedan.

server: port: 8098#default port where the service will be startedeureka:#tells about the Eureka server details and its refresh time instance: leaseRenewalIntervalInSeconds: 1 leaseExpirationDurationInSeconds: 2 client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/ healthcheck: enabled: true lease: duration: 5spring: application: name: student-service #current service name to be used by the eureka server management: security: enabled: false#disable the spring security on the management endpoints like /env, /refresh etc. logging: level: com.example.howtodoinjava: DEBUG

Lägg till REST API

lägg nu till ett RestController och exponera en rest endpoint för att få alla studentdetaljer för en viss skola. Här exponerar vi/getStudentDetailsForSchool/{schoolname} slutpunkt för att tjäna affärssyftet. För enkelhetens skull, vi är hårda kodning student detaljer.

Student klass är en enkel POJO.

testa Eureka-klienten

Starta detta projekt som spring boot-applikation. Kontrollera nu att denna tjänst har registrerats i Eureka server automatiskt. Gå till Eureka service console och uppdatera sidan. Nu om allt går bra kommer vi att se en post för student-service i Eureka service console. Detta indikerar att både Eureka server och klient är medvetna om varandra.

Eureka-konsol med Studenttjänst registrerad

Vi kommer nu att verifiera att /getStudentDetailsForSchool/{schoolname} slutpunkten är upp och kör. Gå till webbläsaren och gå till , det kommer att ge Studentinformationen för en viss skola abcschool.

Student service response

Eureka Client – School Service

nu kommer vi att skapa Skoltjänst som registrerar sig med eureka server – och det kommer att upptäcka och anropa studenttjänst utan hårdkodad url-sökväg.

följ exakta steg för att skapa studenttjänst, för att skapa och köra Eureka client running school service också.

skapa Eureka Client Project

skapa ett Spring boot-projekt från initializer portal med fyra beroenden, dvsActuatorWebRest RepositoriesEureka Discovery. Ge andra Maven GAV koordinater och ladda ner projektet.

packa upp och importera projektet till Eclipse som befintligt maven-projekt.

lägg nu till@EnableEurekaClient annotation på Spring boot application class som finns isrc mapp. Med denna anteckning kommer denna artefakt att fungera som en spring discovery-klient och kommer att registrera sig i Eureka-servern som är ansluten till denna tjänst.

package com.example.howtodoinjava.springeurekaclientschoolservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientSchoolServiceApplication {public static void main(String args) {SpringApplication.run(SpringEurekaClientSchoolServiceApplication.class, args);}}

klientkonfiguration

skapa en fil som heter application.yml i katalogen src\main\resources och Lägg till rader nedan. Dessa konfigurationer liknar studenttjänsten utom portnummer och servicenamn.

Lägg till REST API som förbrukar studenttjänstens REST API

lägg nu till ett RestController och exponera en rest endpoint för att få skolinformation. Denna slutpunkt kommer att använda tjänsten upptäckt stil URL med programnamnet, istället full URL med värd: port.

På så sätt kan vi bli av med specifik Servicekonfiguration och vi kan ge tjänsten slå upp ansvaret för eureka server och rest mall som tillhandahålls här. Vi kan också tillämpa lastbalansering (se @LoadBalanced annotation) här om flera instanser körs för samma tjänst.

webbadressen vi har använt är . Det är uppenbart att vi bara använder servicenamn student-service I stället för host:port. Detta kommer att hanteras internt av spring framework, eureka server och rest mall tillsammans.

Demo av Service Discovery och Calling

Starta nu skoltjänsten också. Alla tre tjänsterna är igång. Kontrollera Eureka serverkonsol. Bådastudent-och skoltjänster måste registreras där.

Eureka-konsol med båda tjänsterna registrerade

gå till webbläsaren och gå till http://localhost:9098//getSchoolDetails/abcschool, det kommer att ge skolan detaljer för en viss skola abcschool detaljer. Vi har åberopat studentservice internt. Svaret kommer att se ut i webbläsaren:

School Service Response

saker att kontrollera om det finns något fel

  1. Annotations @EnableEurekaServer och @EnableEurekaClient är hjärtat i applikationsekosystemet. Utan dessa två saker kommer inte att fungera alls.
  2. se till att eureka server-tjänsten redan körs när du startar config-klienttjänsten, annars kan det ta lite tid att registrera sig, vilket kan skapa förvirring under testningen.

sammanfattning

vi såg hur enkelt man kan distribuera service registry och discovery server samt klienter effektivt. Spring framework upprätthåller många saker internt. Här använder vi bara några anteckningar och mycket minimal konfiguration för att uppnå hela sakerna snabbt.