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
- Stack tecnologico e runtime
- Che cosa è Netflix Eureka Server e client?
- Eureka Service Registry Server
- Crea Eureka Server
- Configurazione del server
- Test Eureka Server
- Eureka Client – Student Service
- Crea progetto client Eureka
- Configurazione client
- Aggiungi API REST
- Prova Eureka Client
- Eureka Client – School Service
- Crea progetto client Eureka
- Configurazione client
- Aggiungi API REST che consumano l’API REST di student service
- Demo di Service Discovery e Calling
- Cose da controllare se di fronte a qualsiasi errore
- Sommario
Panoramica
Creeremo tre microservizi per questo esempio di Netflix Eureka.
- Eureka Service Registry Server – Questo microservizio fornirà il registro di servizio e il server di rilevamento.
- 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.
- 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.
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 server
eActuator
. Dare altre coordinate maven GAV e scaricare il progetto.
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@EnableEurekaServer
sulla 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.yml
nella 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.
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 esempioActuator
Web
Rest Repositories
Eureka 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.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.yml
nella 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.
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
.
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 esempioActuator
Web
Rest Repositories
Eureka 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.yml
nella 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-service
al 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ì.
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:
Cose da controllare se di fronte a qualsiasi errore
- Annotazioni
@EnableEurekaServer
e@EnableEurekaClient
sono il cuore dell’applicazione dell’ecosistema. Senza queste due cose non funzionerà affatto. - 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.