Articles

Spring cloud service Discovery cu Netflix Eureka

Aflați pentru a crea microservice, bazat pe Spring cloud, pe Netflix Eureka registry server și modul în care alte microservicii (clienti Eureka) – l utilizați pentru a înregistra și de a descoperi servicii pentru a apela API-urile lor.

vom folosi Spring Boot bazat Spring Cloud API. Vom folosi serverul Eureka Netflix pentru construirea serverului de registru de servicii și a clienților Eureka care se vor înregistra și vor descoperi alte servicii pentru a apela API-urile REST.

Prezentare generală

vom crea trei microservicii pentru acest exemplu Netflix Eureka.

  1. Eureka Service Registry Server – acest microserviciu va furniza serviciul registry și discovery server.
  2. Student Microservice – care va oferi unele funcționalități bazate pe entitate Student. Va fi un serviciu bazat pe rest și, cel mai important, va fi un serviciu pentru clienți eureka, care va discuta cu serviciul eureka pentru a se înregistra în registrul de servicii.
  3. School Microservice-același tip ca și Serviciul pentru studenți – doar caracteristica adăugată este că va invoca serviciul studențesc cu mecanismul de căutare a serviciului. Nu vom folosi URL-ul absolut al serviciului student pentru a interacționa cu acel serviciu.

aici este diagrama de interacțiune între cele trei servicii enumerate mai sus.

interacțiunea componentelor între ele

Tech Stack și 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

ce este serverul și clienții Netflix Eureka?

după cum știm în aceste zile, există o mulțime de impuls în jurul microservicii. Trecerea de la arhitectura monolitică la cea bazată pe microservicii oferă multe beneficii pentru viitor în ceea ce privește mentenabilitatea, scalabilitatea, disponibilitatea ridicată etc. Cu toate acestea, în același timp, există multe provocări, de asemenea, în timp ce face această migrație. Una dintre ele este menținerea adreselor individuale de microservicii. Această sarcină poate fi extrem de complexă – în funcție de numărul de servicii și de natura lor dinamică. Dacă întreaga infrastructură este distribuită și există și o anumită replicare, atunci menținerea adreselor acestui serviciu devine mai dificilă.

pentru a rezolva acest lucru, în calculul distribuit există un concept numit ‘înregistrare și descoperire de servicii’ în care un server dedicat este responsabil să mențină registrul tuturor Microserviciilor care au fost implementate și eliminate. Aceasta va acționa ca o carte de telefon a tuturor celorlalte aplicații/microservicii. gândiți-vă la el ca la un serviciu de căutare în care microserviciile (clienții) se pot înregistra și pot descoperi alte microservicii înregistrate. Atunci când un microserviciu client se înregistrează cu Eureka, acesta oferă metadate, cum ar fi gazda, portul și indicatorul de sănătate, permițând astfel altor microservicii să-l descopere. Serverul discovery așteaptă un mesaj regulat al bătăilor inimii de la fiecare instanță microservice. Dacă o instanță începe să nu reușească în mod constant să trimită o bătaie de inimă, serverul discovery va elimina instanța din registrul său. În acest fel, vom avea un ecosistem foarte stabil de microservicii care colaborează între ele și, pe lângă aceasta, nu trebuie să menținem manual adresa altor microservicii, ceea ce este o sarcină aproape imposibilă dacă scara sus/jos este foarte frecventă, la cerere și folosim virtual host pentru a găzdui serviciile special în mediul cloud.

Eureka Service Registry Server

urmați acești pași pentru a crea și rula Eureka server.

creare Server Eureka

Creare proiect Spring boot din portalul Spring Boot initializer cu două dependențe, adică. Eureka server și Actuator. Dă alte coordonate maven GAV și descărca proiectul.

Eureka Server Service Project Generation

dezarhivați și importați proiectul în Eclipse ca proiect Maven existent. În acest pas, toate dependențele necesare vor fi descărcate din depozitul maven.

acum deschidețiSpringEurekaServerApplication clasa pe care spring a generat-o deja în proiectul descărcat și adăugați adnotarea@EnableEurekaServerpe clasă.

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

construiți proiectul încă o dată. Cu această adnotare, acest artefact va acționa ca un registru microservice și un server de descoperire.

Configurare Server

creați un fișier numitapplication.yml în directorulsrc\main\resources. Adăugați aceste proprietăți-

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

creați un alt fișier numitbootstrap.yml în directorulsrc\main\resources. Adăugați aceste proprietăți –

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

Test Eureka Server

porniți aplicația ca aplicație de pornire de primăvară. Deschideți browserul și accesați , ar trebui să vedeți pagina de pornire a serverului eureka care arată mai jos.

consola Eureka fără niciun Client

vă rugăm să rețineți că în acest moment nu este înregistrat niciun serviciu care este așteptat și odată ce vom roti serviciile client, acest server va fi actualizat automat cu detaliile serviciilor pentru clienți.

Eureka Client – Student Service

urmați acești pași pentru a crea și rula Eureka client care rulează student service.

creați un proiect client Eureka

creați un proiect de pornire de primăvară din portalul inițializatorului cu patru dependențe, adică ActuatorWebRest RepositoriesEureka Discovery. Dă alte coordonate maven GAV și descărca proiectul.

client project Generation –
Student Microservice

dezarhivați și importați proiectul în Eclipse ca proiect Maven existent.

Acum adăugați@EnableEurekaClient adnotarea pe clasa de aplicații de pornire de primăvară prezentă în folderulsrc. Cu această adnotare, acest artefact va acționa ca un client spring discovery și se va înregistra pe serverul eureka atașat acestui serviciu.

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

Configurare Client

creați un fișier numitapplication.yml în directorulsrc\main\resources și adăugați liniile de mai jos.

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

adăugați API REST

Acum adăugați unRestController și expuneți un punct final rest pentru a obține toate detaliile elevului pentru o anumită școală. Aici expunem/getStudentDetailsForSchool/{schoolname} endpoint pentru a servi scopului afacerii. Pentru simplitate, suntem greu de codificare detaliile de student.

Student clasa este un POJO simplu.

Test Eureka client

începeți acest proiect ca aplicație de pornire de primăvară. Acum verificați dacă acest serviciu a fost înregistrat automat în serverul Eureka. Accesați consola de servicii Eureka și reîmprospătați pagina. Acum, dacă totul merge bine, vom vedea o intrare pentru serviciul Studențesc în consola de servicii eureka. Acest lucru indică faptul că atât serverul Eureka, cât și clientul se cunosc reciproc.

consola Eureka cu Serviciul pentru studenți înregistrat

vom verifica acum dacă /getStudentDetailsForSchool/{schoolname} punctul final este sus și să fie difuzate. Du-te la browser-ul și du-te la , se va da detalii elev pentru o anumită școală abcschool.

Student service response

Eureka Client – School Service

acum vom crea serviciul școlar care se va înregistra la serverul eureka – și va descoperi și invoca student-service fără cale URL-ul hardcoded.

urmați pașii exacți pentru crearea Serviciului pentru studenți, pentru a crea și rula serviciul școlar care rulează clientul Eureka.

creați un proiect client Eureka

creați un proiect de pornire de primăvară din portalul inițializatorului cu patru dependențe, adică ActuatorWebRest RepositoriesEureka Discovery. Dă alte coordonate maven GAV și descărca proiectul.

dezarhivați și importați proiectul în Eclipse ca proiect Maven existent.

Acum adăugați@EnableEurekaClient adnotarea pe clasa de aplicații de pornire de primăvară prezentă în folderulsrc. Cu această adnotare, acest artefact va acționa ca un client spring discovery și se va înregistra pe serverul eureka atașat acestui serviciu.

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

Configurare Client

creați un fișier numitapplication.yml în directorulsrc\main\resources și adăugați liniile de mai jos. Aceste configurații sunt foarte asemănătoare cu serviciul studențesc, cu excepția numărului portului și a numelui serviciului.

adăugați API REST care consumă API REST student service

Acum adăugați unRestController și expuneți un punct final rest pentru a obține detalii despre școală. Acest punct final va utiliza URL-ul stilului de descoperire a serviciului folosind numele aplicației, în schimb URL complet cu host:port.

în acest fel putem scăpa de configurația specifică a serviciului și putem oferi serviciului să caute responsabilitatea către serverul eureka și șablonul rest furnizat aici. De asemenea, putem aplica echilibrarea încărcării (vezi @LoadBalanced adnotare) aici dacă mai multe instanțe rulează pentru același serviciu.

URL-ul pe care l-am folosit este. În mod clar, folosim doar numele serviciului student-service în locul host:port. Acest lucru va fi gestionat intern de spring framework, Eureka server și rest template împreună.

Demo de descoperire de servicii și de asteptare

acum începe serviciul de școală, de asemenea. Toate cele trei servicii sunt pornite. Verificați consola serverului eureka. Bothe student și serviciile școlare trebuie să fie înregistrate acolo.

consola Eureka cu ambele servicii înregistrate

mergeți la browser și mergeți lahttp://localhost:9098//getSchoolDetails/abcschool, este va oferi detaliile școlii pentru o anumită școală abcschool detalii. Am invocat serviciul Studențesc intern. Răspunsul va arăta ca în browser:

răspunsul Serviciului școlar

lucruri pentru a verifica dacă se confruntă cu orice eroare

  1. adnotări @EnableEurekaServer și @EnableEurekaClient sunt inima ecosistemului aplicației. Fără aceste două lucruri nu va funcționa deloc.
  2. asigurați-vă că la momentul pornirii serviciului client config, serviciul eureka server rulează deja, altfel ar putea dura ceva timp pentru a vă înregistra, ceea ce ar putea crea confuzie în timpul testării.

rezumat

am văzut cât de ușor se poate implementa registrul de servicii și serverul de descoperire, precum și clienții în mod eficient. Cadrul de primăvară menține o mulțime de lucruri pe plan intern. Aici folosim doar câteva adnotări și o configurație foarte minimă pentru a realiza rapid lucrurile întregi.