Articles

Spring Cloud Service Discovery met Netflix Eureka

leer microservice te creëren, gebaseerd op Spring cloud, op Netflix Eureka registry server en hoe andere microservices (Eureka-klanten) het gebruiken om diensten te registreren en te ontdekken om hun API ‘ s te bellen.

We gebruiken Spring Boot based Spring Cloud API. We zullen Netflix Eureka server gebruiken voor het bouwen van de service registry server en Eureka clients die zichzelf registreren en andere diensten ontdekken om REST API ‘ s te bellen.

overzicht

We zullen drie microservices maken voor dit Netflix Eureka voorbeeld.

  1. Eureka Service Registry Server – deze microservice levert het service registry en de zoekserver.
  2. Student Microservice-die enige functionaliteit zal geven op basis van Student-entiteit. Het zal een op rust gebaseerde dienst zijn en vooral een eureka-klantenservice, die met eureka service zal praten om zich in het serviceregister te registreren.
  3. School Microservice-hetzelfde type als Student service-enige toegevoegde functie is dat het Student service met service look up mechanisme zal aanroepen. We zullen geen absolute URL van student service gebruiken om te communiceren met die service.

Hier is het interactiediagram tussen bovengenoemde drie diensten.

Component interactie met elkaar

Tech Stack and 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

wat zijn Netflix Eureka Server en Clients?

zoals we tegenwoordig weten, is er veel momentum rond Microservices. De overgang van monolithische naar Microservice gebaseerde architectuur biedt vele voordelen voor de toekomst in termen van onderhoudbaarheid, schaalbaarheid, hoge beschikbaarheid enz. Tegelijkertijd zijn er echter ook veel uitdagingen bij het doen van deze migratie. Een van hen is om individuele microservices adressen te behouden. Deze taak kan enorm complex zijn – afhankelijk van het aantal diensten en hun dynamische aard. Als de hele infrastructuur wordt gedistribueerd en er is ook enige replicatie, dan wordt het onderhouden van deze service-adressen moeilijker.

om dit op te lossen, is er in de distributed computing een concept genaamd ‘Service registration and discovery’ waarbij één dedicated server verantwoordelijk is voor het bijhouden van het register van alle Microservice die is geïmplementeerd en verwijderd. Dit zal fungeren als een telefoonboek van alle andere toepassingen/microservices.

zie het als een opzoekdienst waar microservices (clients) zichzelf kunnen registreren en andere geregistreerde microservices kunnen ontdekken. Wanneer een client microservice zich registreert bij Eureka biedt het metadata zoals host, poort en gezondheidsindicator waardoor andere microservices het kunnen ontdekken. De discovery server verwacht een regelmatige hartslag bericht van elke microservice instantie. Als een instantie er consequent niet in slaagt een heartbeat te verzenden, zal de zoekserver de instantie uit zijn register verwijderen. Op deze manier hebben we een zeer stabiel ecosysteem van Microservices die met elkaar samenwerken, en bovendien hoeven we het adres van andere Microservices niet handmatig te onderhouden, wat een bijna onmogelijke taak is als de schaal omhoog/omlaag zeer frequent is, on demand en we virtual host gebruiken om de diensten speciaal in de cloud te hosten.

Eureka Service Registry Server

volg deze stappen om Eureka server aan te maken en uit te voeren.

create Eureka Server

Maak een Spring boot project van Spring Boot initializer portal met twee afhankelijkheden i. e. Eureka server en Actuator. Geef andere Maven GAV coördinaten en download het project.

Eureka Server Service Project Generation

Unzip en importeer het project in Eclipse als bestaand maven-project. In deze stap zullen alle noodzakelijke afhankelijkheden worden gedownload van maven repository.

open nu SpringEurekaServerApplication klasse die spring al gegenereerd heeft in het gedownloade project en voeg de @EnableEurekaServerannotatie toe op de klasse.

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); }}

bouw het project opnieuw op. Met deze annotatie zal dit artefact fungeren als microservice registry en discovery server.

serverconfiguratie

Maak één bestand aan met de naam application.yml in de src\main\resources map. Voeg deze eigenschappen toe –

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

Maak een ander bestand aan met de naam bootstrap.yml in de src\main\resources map. Voeg deze eigenschappen toe –

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

Test Eureka Server

Start de toepassing Als spring boot toepassing. Open browser en ga naar , je zou de eureka server startpagina moeten zien die er hieronder uitziet.

Eureka Console Without Any Client

houd er rekening mee dat op dit moment hier geen service is geregistreerd die wordt verwacht en zodra we de client services zullen draaien, zal deze server automatisch worden bijgewerkt met de details van de client services.

Eureka Client-Student Service

volg deze stappen om Eureka client running student service aan te maken en uit te voeren.

create Eureka Client Project

Maak een Spring boot project van initializer portal met vier afhankelijkheden dwz ActuatorWebRest RepositoriesEureka Discovery. Geef andere Maven GAV coördinaten en download het project.

client Project Generation –
Student Microservice

Unzip en importeer het project in Eclipse als bestaand maven-project.

Voeg nu de@EnableEurekaClient annotatie toe op Spring boot applicatie klasse aanwezig insrc map. Met deze annotatie zal dit artefact fungeren als een spring discovery client en zich registreren in de eureka server die aan deze service is gekoppeld.

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); }}

clientconfiguratie

Maak één bestand met de naam application.yml in de src\main\resources map en voeg onderstaande regels toe.

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

add REST API

Voeg nu één RestController toe en leg één rest-eindpunt bloot voor het verkrijgen van alle leerlinggegevens voor een bepaalde school. Hier tonen we /getStudentDetailsForSchool/{schoolname} eindpunt om het zakelijke doel te dienen. Voor de eenvoud, we zijn hard coderen van de student details.

Student klasse is een eenvoudige POJO.

Test Eureka Client

Start Dit project als spring boot applicatie. Controleer nu of deze service automatisch is geregistreerd in Eureka server. Ga naar Eureka service console en vernieuw de pagina. Als alles goed gaat, zien we één vermelding voor student-service in de eureka service console. Dit geeft aan dat zowel Eureka server als client elkaar kennen.

Eureka console with Student service registered

We zullen nu controleren of het /getStudentDetailsForSchool/{schoolname} aan de gang is. Ga naar browser en ga naar , het geeft de leerling details voor een bepaalde school abcschool.

Student Service response

Eureka Client – School Service

nu zullen we school service creëren die zichzelf zal registreren met eureka server – en het zal student-service ontdekken en aanroepen zonder hardcoded URL-pad.

Volg de exacte stappen voor het maken van student service, om Eureka client running school service ook te maken en uit te voeren.

create Eureka Client Project

Maak een Spring boot project van initializer portal met vier afhankelijkheden dwz ActuatorWebRest RepositoriesEureka Discovery. Geef andere Maven GAV coördinaten en download het project.

Unzip en importeer het project in Eclipse als bestaand maven project.

Voeg nu de@EnableEurekaClient annotatie toe op Spring boot applicatie klasse aanwezig insrc map. Met deze annotatie zal dit artefact fungeren als een spring discovery client en zich registreren in de eureka server die aan deze service is gekoppeld.

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);}}

clientconfiguratie

Maak één bestand met de naam application.yml in de src\main\resources map en voeg onderstaande regels toe. Deze configuraties zijn zeer vergelijkbaar met student service behalve poortnummer en service naam.

add REST API which consume student service ‘ s REST API

Voeg nu één RestController toe en leg één rest-eindpunt bloot voor het verkrijgen van schoolgegevens. Op dit eindpunt wordt de URL voor serviceontdekkingsstijl gebruikt met de naam van de toepassing, in plaats van de volledige URL met de host: – poort.

op deze manier kunnen we ons ontdoen van specifieke service configuratie en kunnen we de service lookup verantwoordelijkheid geven aan eureka server en rest template die hier wordt geleverd. We kunnen ook taakverdeling toepassen (zie @LoadBalanced annotatie) hier als de meerdere instanties draaien voor dezelfde service.

de URL die we hebben gebruikt is . Het is duidelijk dat we alleen service naam student-service gebruiken in plaats van host:port. Dit zal intern worden afgehandeld door spring framework, eureka server en rest template samen.

Demo van Service Discovery en het aanroepen van

start nu ook de schooldienst. Alle drie de diensten zijn gestart. Controleer de eureka server console. Zowel de studenten – en schooldiensten moeten daar worden geregistreerd.

Eureka-console met beide diensten geregistreerd

Ga naar browser en ga naar http://localhost:9098//getSchoolDetails/abcschool, Het geeft de schoolgegevens voor een bepaalde school abcschool details. We hebben intern een beroep gedaan op de studentendienst. De reactie zal uitzien in de browser:

School Service Response

Dingen om te controleren of met een fout

  1. Annotaties @EnableEurekaServer en @EnableEurekaClient zijn het hart van de applicatie-ecosysteem. Zonder die twee dingen zal helemaal niet werken.
  2. zorg ervoor dat op het moment van het starten van de config client service, eureka server service al draait, anders kan het enige tijd duren om te registreren, wat verwarring kan veroorzaken tijdens het testen.

samenvatting

we zagen hoe gemakkelijk men zowel service registry en discovery server als clients efficiënt kan implementeren. Spring framework is het onderhouden van veel dingen intern. Hier zijn we gewoon met behulp van een paar annotaties en zeer minimale configuratie om de hele dingen snel te bereiken.