Articles

Spring Cloud Service Discovery con Netflix Eureka

Impara a creare microservizi, basati su Spring cloud, su Netflix Eureka registry server e come altri microservizi (client Eureka) lo usano per registrarsi e scoprire i servizi per chiamare le loro API.

Useremo l’API Spring Cloud basata su Spring Boot. Useremo Netflix Eureka server per costruire il server di registro del servizio e i client Eureka che si registreranno e scopriranno altri servizi per chiamare le API REST.

Panoramica

Creeremo tre microservizi per questo esempio di Netflix Eureka.

  1. Eureka Service Registry Server – Questo microservizio fornirà il registro di servizio e il server di rilevamento.
  2. Student Microservice-Che darà alcune funzionalità basate sull’entità studente. Sarà un servizio basato su rest e, soprattutto, sarà un servizio clienti eureka, che parlerà con eureka service per registrarsi nel registro dei servizi.
  3. Microservizio scolastico – Stesso tipo di servizio per studenti-solo la funzionalità aggiunta è che invocherà il servizio per studenti con il meccanismo di ricerca del servizio. Non useremo l’URL assoluto del servizio studenti per interagire con quel servizio.

Ecco il diagramma di interazione tra i tre servizi sopra elencati.

Interazione dei componenti tra loro

Stack tecnologico e 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

Che cosa è Netflix Eureka Server e client?

Come sappiamo in questi giorni, c’è molto slancio intorno ai Microservizi. La transizione dall’architettura monolitica a quella basata su microservizi offre molti vantaggi per il futuro in termini di manutenibilità, scalabilità, alta disponibilità ecc. Tuttavia, allo stesso tempo, ci sono molte sfide anche mentre si fa questa migrazione. Uno di questi è quello di mantenere singoli indirizzi Microservizi. Questo compito può essere estremamente complesso, a seconda del numero di servizi e della loro natura dinamica. Se l’intera infrastruttura è distribuita e c’è anche qualche replica, il mantenimento di questi indirizzi di servizio diventa più difficile.

Per risolvere questo problema, nel calcolo distribuito esiste un concetto chiamato “Registrazione e scoperta del servizio” in cui un server dedicato è responsabile della manutenzione del registro di tutti i Microservizi che sono stati distribuiti e rimossi. Questo agirà come una rubrica di tutte le altre applicazioni/microservizi.

Pensalo come un servizio di ricerca in cui i microservizi (client) possono registrarsi e scoprire altri microservizi registrati. Quando un microservizio client si registra con Eureka fornisce metadati come host, porta e indicatore di stato, consentendo così ad altri microservizi di scoprirlo. Il server discovery prevede un messaggio heartbeat regolare da ogni istanza del microservizio. Se un’istanza inizia a non inviare un heartbeat in modo coerente, il server di rilevamento rimuoverà l’istanza dal registro di sistema. In questo modo avremo un ecosistema molto stabile di Microservizi che collaborano tra loro, e per di più non dobbiamo mantenere manualmente l’indirizzo di altri Microservizi, che è un compito quasi impossibile se la scala su/giù è molto frequente, su richiesta e usiamo l’host virtuale per ospitare i servizi specialmente nell’ambiente cloud.

Eureka Service Registry Server

Attenersi alla seguente procedura per creare ed eseguire Eureka server.

Crea Eureka Server

Crea un progetto Spring boot dal portale Spring Boot initializer con due dipendenze, ad esempio Eureka servereActuator. Dare altre coordinate maven GAV e scaricare il progetto.

Eureka Server Service Project Generation

Decomprimere e importare il progetto in Eclipse come progetto maven esistente. In questo passaggio, tutte le dipendenze necessarie verranno scaricate dal repository maven.

Ora apriSpringEurekaServerApplication classe che spring ha già generato nel progetto scaricato e aggiungi l’annotazione@EnableEurekaServersulla classe.

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

Crea il progetto ancora una volta. Con questa annotazione, questo artefatto agirà come microservice registry e discovery server.

Configurazione del server

Crea un file chiamatoapplication.yml nella directorysrc\main\resources. Aggiungi queste proprietà –

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 un altro file chiamato bootstrap.ymlnella directory src\main\resources. Aggiungere queste proprietà-

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

Test Eureka Server

Avviare l’applicazione come applicazione di avvio a molla. Apri il browser e vai a , dovresti vedere la home page del server eureka che appare come di seguito.

Eureka Console Senza Alcun Client

si Prega di notare che a questo punto il servizio non è registrato qui che è previsto e una volta che si aziona il servizio client, il server verrà aggiornato automaticamente con i dati del cliente servizi.

Eureka Client – Student Service

Segui questi passaggi per creare ed eseguire Eureka client running student service.

Crea progetto client Eureka

Crea un progetto di avvio a molla dal portale inizializzatore con quattro dipendenze, ad esempioActuatorWebRest RepositoriesEureka Discovery. Dare altre coordinate maven GAV e scaricare il progetto.

Client Project Generation –
Student Microservice

Decomprimere e importare il progetto in Eclipse come progetto maven esistente.

Ora aggiungi l’annotazione@EnableEurekaClient sulla classe dell’applicazione Spring boot presente nella cartellasrc. Con questa annotazione, questo artefatto agirà come un client spring discovery e si registrerà nel server eureka collegato a questo servizio.

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

Configurazione client

Crea un file chiamato application.ymlnella directory src\main\resources e aggiungi sotto le righe.

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

Aggiungi API REST

Ora aggiungi unRestController ed espone un endpoint rest per ottenere tutti i dettagli degli studenti per una particolare scuola. Qui stiamo esponendo/getStudentDetailsForSchool/{schoolname} endpoint per servire lo scopo aziendale. Per semplicità, stiamo codificando i dettagli degli studenti.

Student classe è un semplice POJO.

Prova Eureka Client

Avvia questo progetto come applicazione di avvio a molla. Ora verificare che questo servizio è stato registrato in Eureka server automaticamente. Vai a Eureka service console e aggiorna la pagina. Ora, se tutto va bene, vedremo una voce per student-service nella console di servizio eureka. Ciò indica che sia il server che il client Eureka si conoscono a vicenda.

Eureka console con servizio studenti registrato

Verificheremo ora che l’endpoint /getStudentDetailsForSchool/{schoolname} è installato e funzionante. Vai al browser e vai a , fornirà i dettagli dello studente per una particolare scuola abcschool.

Student Service response

Eureka Client – School Service

Ora creeremo il servizio scolastico che si registrerà con eureka server – e scoprirà e invoca student-service senza percorso URL hardcoded.

Seguire i passaggi esatti per la creazione di student service, per creare ed eseguire Eureka client che esegue anche il servizio scolastico.

Crea progetto client Eureka

Crea un progetto di avvio a molla dal portale inizializzatore con quattro dipendenze, ad esempioActuatorWebRest RepositoriesEureka Discovery. Dare altre coordinate maven GAV e scaricare il progetto.

Decomprimere e importare il progetto in Eclipse come progetto maven esistente.

Ora aggiungi l’annotazione@EnableEurekaClient sulla classe dell’applicazione Spring boot presente nella cartellasrc. Con questa annotazione, questo artefatto agirà come un client spring discovery e si registrerà nel server eureka collegato a questo servizio.

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

Configurazione client

Crea un file chiamato application.ymlnella directory src\main\resources e aggiungi sotto le righe. Queste configurazioni sono molto simili al servizio student tranne il numero di porta e il nome del servizio.

Aggiungi API REST che consumano l’API REST di student service

Ora aggiungi unRestController ed espone un endpoint rest per ottenere i dettagli della scuola. Questo endpoint utilizzerà l’URL dello stile di rilevamento del servizio utilizzando il nome dell’applicazione, invece l’URL completo con host: port.

In questo modo possiamo sbarazzarci della configurazione specifica del servizio e possiamo dare al servizio la responsabilità di cercare il server eureka e il modello rest fornito qui. Possiamo anche applicare il bilanciamento del carico (vedi annotazione @LoadBalanced) qui se le istanze multiple sono in esecuzione per lo stesso servizio.

L’URL che abbiamo usato è . Chiaramente stiamo usando solo il nome del servizio student-serviceal posto di host:port. Questo sarà gestito internamente da spring framework, eureka server e rest template insieme.

Demo di Service Discovery e Calling

Ora avvia anche il servizio scolastico. Tutti e tre i servizi sono avviati. Controlla la console del server eureka. Bothe studente e servizi scolastici devono essere registrati lì.

Eureka console con entrambi i servizi registrati

Passare al browser e andare al http://localhost:9098//getSchoolDetails/abcschool, darà la scuola di dettagli per una particolare scuola abcschool dettagli. Abbiamo invocato il servizio studenti internamente. La risposta sarà simile nel browser:

Scuola di Risposta del Servizio

Cose da controllare se di fronte a qualsiasi errore

  1. Annotazioni @EnableEurekaServer e @EnableEurekaClient sono il cuore dell’applicazione dell’ecosistema. Senza queste due cose non funzionerà affatto.
  2. Assicurarsi che al momento dell’avvio del servizio client di configurazione, il servizio server eureka sia già in esecuzione, altrimenti potrebbe richiedere del tempo per registrarsi, il che potrebbe creare confusione durante il test.

Sommario

Abbiamo visto come facilmente si può distribuire registro di servizio e server di scoperta così come i client in modo efficiente. Spring framework sta mantenendo molte cose internamente. Qui stiamo solo usando un paio di annotazioni e una configurazione molto minima per ottenere rapidamente il tutto.