Articles

Spring Cloud Service Discovery mit Netflix Eureka

Erfahren Sie, wie Sie einen auf Spring Cloud basierenden Microservice auf dem Netflix Eureka Registry Server erstellen und wie andere Microservices (Eureka-Clients) damit Dienste registrieren und entdecken, um ihre APIs aufzurufen.

Wir werden Spring Boot basierte Spring Cloud API verwenden. Wir werden Netflix Eureka Server verwenden, um den Dienstregistrierungsserver und Eureka-Clients zu erstellen, die sich selbst registrieren und andere Dienste entdecken, um REST-APIs aufzurufen.

Übersicht

Wir werden drei Microservices für dieses Netflix Eureka-Beispiel erstellen.

  1. Eureka Service Registry Server – Dieser Microservice stellt die Service Registry und den Discovery Server bereit.
  2. Student Microservice – Der einige Funktionen basierend auf der Student-Entität bereitstellt. Es wird ein Rest-basierter Dienst sein und vor allem ein Eureka-Client-Dienst, der mit dem Eureka-Dienst kommuniziert, um sich in der Dienstregistrierung zu registrieren.
  3. Schule Microservice – Gleiche Art wie der Student Service – nur zusätzliche Funktion ist, dass es Student Service mit Service-Look-up-Mechanismus aufrufen wird. Wir werden die URL des Dienstes nicht verwenden, um mit diesem Dienst zu interagieren.

Hier ist das Interaktionsdiagramm zwischen den oben aufgeführten drei Diensten.

Interaktion der Komponenten untereinander

Tech Stack und Laufzeit

  • 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

Was sind Netflix Eureka Server und Clients?

Wie wir heutzutage wissen, gibt es eine Menge Dynamik rund um Microservices. Der Übergang von einer monolithischen zu einer Microservice-basierten Architektur bietet viele Vorteile für die Zukunft in Bezug auf Wartbarkeit, Skalierbarkeit, Hochverfügbarkeit usw. Gleichzeitig gibt es jedoch auch viele Herausforderungen bei dieser Migration. Eine davon ist die Pflege einzelner Microservices-Adressen. Diese Aufgabe kann sehr komplex sein – abhängig von der Anzahl der Dienste und ihrer Dynamik. Wenn die gesamte Infrastruktur verteilt ist und es auch eine gewisse Replikation gibt, wird es schwieriger, diese Serviceadressen beizubehalten.

Um dieses Problem zu lösen, gibt es im verteilten Computing-Bereich ein Konzept namens ‚Service Registration and Discovery‘, bei dem ein dedizierter Server dafür verantwortlich ist, die Registrierung aller bereitgestellten und entfernten Microservices zu verwalten. Dies wird wie ein Telefonbuch aller anderen Anwendungen / Microservices handeln.

Betrachten Sie es als einen Suchdienst, bei dem sich Microservices (Clients) registrieren und andere registrierte Microservices entdecken können. Wenn sich ein Client-Microservice bei Eureka registriert, stellt er Metadaten wie Host, Port und Integritätsindikator bereit, sodass andere Microservices ihn erkennen können. Der Discovery-Server erwartet von jeder Microservice-Instanz eine regelmäßige Heartbeat-Nachricht. Wenn eine Instanz immer wieder einen Heartbeat sendet, entfernt der Discovery Server die Instanz aus seiner Registrierung. Auf diese Weise haben wir ein sehr stabiles Ökosystem von Microservices, die miteinander zusammenarbeiten, und darüber hinaus müssen wir die Adresse anderer Microservices nicht manuell pflegen, was eine nahezu unmögliche Aufgabe ist, wenn die Skalierung sehr häufig ist, auf Anfrage und wir verwenden Virtual Host, um die Dienste speziell in der Cloud-Umgebung zu hosten.

Eureka Service Registry Server

Befolgen Sie diese Schritte, um Eureka Server zu erstellen und auszuführen.

Eureka Server erstellen

Erstellen Sie ein Spring Boot-Projekt aus dem Spring Boot Initializer Portal mit zwei Abhängigkeiten, dh. Eureka server und Actuator. Geben Sie andere Maven GAV-Koordinaten an und laden Sie das Projekt herunter.

Eureka Server Service Project Generation

Entpacken Sie das Projekt und importieren Sie es als vorhandenes Maven-Projekt in Eclipse. In diesem Schritt werden alle notwendigen Abhängigkeiten aus dem Maven-Repository heruntergeladen.

Öffnen Sie nun SpringEurekaServerApplication Klasse, die spring bereits im heruntergeladenen Projekt generiert hat, und fügen Sie die @EnableEurekaServerAnmerkung zur Klasse hinzu.

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

Erstellen Sie das Projekt erneut. Mit dieser Anmerkung verhält sich dieses Artefakt wie Microservice Registry und Discovery Server.

Serverkonfiguration

Erstellen Sie eine Datei mit dem Namen application.yml im Verzeichnis src\main\resources. Fügen Sie diese Eigenschaften hinzu –

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

Erstellen Sie eine weitere Datei mit dem Namen bootstrap.yml im Verzeichnis src\main\resources. Fügen Sie diese Eigenschaften hinzu –

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

Test Eureka Server

Starten Sie die Anwendung als Spring Boot-Anwendung. Öffnen Sie den Browser und gehen Sie zu , Sie sollten die Eureka Server-Homepage sehen, die wie folgt aussieht.

Eureka-Konsole ohne Client

Bitte beachten Sie, dass zu diesem Zeitpunkt kein Dienst hier registriert ist, was erwartet wird, und sobald wir die Client-Dienste hochfahren, wird dieser Server automatisch mit den Details der Client-Dienste aktualisiert.

Eureka Client – Student Service

Befolgen Sie diese Schritte, um Eureka Client running student service zu erstellen und auszuführen.

Erstellen Sie ein Eureka-Client-Projekt

Erstellen Sie ein Spring Boot-Projekt aus dem Initialisierungsportal mit vier Abhängigkeiten, dh ActuatorWebRest RepositoriesEureka Discovery. Geben Sie andere Maven GAV-Koordinaten an und laden Sie das Projekt herunter.

Client–Projektgenerierung –
Student Microservice

Entpacken Sie das Projekt und importieren Sie es als vorhandenes Maven-Projekt in Eclipse.

Fügen Sie nun die @EnableEurekaClient Anmerkung zur Spring Boot-Anwendungsklasse hinzu, die im Ordner src vorhanden ist. Mit dieser Anmerkung verhält sich dieses Artefakt wie ein Spring Discovery-Client und registriert sich auf dem an diesen Dienst angehängten Eureka-Server.

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

Client-Konfiguration

Erstellen Sie eine Datei mit dem Namen application.yml im Verzeichnis src\main\resources und fügen Sie die folgenden Zeilen hinzu.

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

REST-API hinzufügen

Fügen Sie nun einen RestController hinzu und machen Sie einen Rest-Endpunkt verfügbar, um alle Schülerdetails für eine bestimmte Schule abzurufen. Hier stellen wir den Endpunkt /getStudentDetailsForSchool/{schoolname} bereit, um dem Geschäftszweck zu dienen. Der Einfachheit halber codieren wir die Schülerdetails hart.

Student Klasse ist ein einfaches POJO.

Eureka Client testen

Starten Sie dieses Projekt als Spring Boot-Anwendung. Stellen Sie nun sicher, dass dieser Dienst automatisch in Eureka Server registriert wurde. Wechseln Sie zur Eureka Service Console und aktualisieren Sie die Seite. Wenn nun alles gut geht, sehen wir einen Eintrag für Student-Service in der eureka Service Console. Dies zeigt an, dass sich sowohl Eureka Server als auch Client gegenseitig kennen.

Eureka-Konsole mit registriertem Student service

Wir werden nun überprüfen, ob der /getStudentDetailsForSchool/{schoolname} Endpunkt aktiviert ist. Gehen Sie zum Browser und gehen Sie zu , es werden die Schülerdetails für eine bestimmte Schule abcschool .

Student Service response

Eureka Client – Schuldienst

Jetzt werden wir einen Schuldienst erstellen, der sich bei eureka Server registriert – und er wird den Schülerdienst entdecken und aufrufen, ohne fest codierter URL-Pfad.

Befolgen Sie die genauen Schritte zum Erstellen des Student Service, um auch den Eureka Client running school Service zu erstellen und auszuführen.

Erstellen Sie ein Eureka-Client-Projekt

Erstellen Sie ein Spring Boot-Projekt aus dem Initialisierungsportal mit vier Abhängigkeiten, dh ActuatorWebRest RepositoriesEureka Discovery. Geben Sie andere Maven GAV-Koordinaten an und laden Sie das Projekt herunter.

Entpacken Sie das Projekt und importieren Sie es als vorhandenes Maven-Projekt in Eclipse.

Fügen Sie nun die @EnableEurekaClient Anmerkung zur Spring Boot-Anwendungsklasse hinzu, die im Ordner src vorhanden ist. Mit dieser Anmerkung verhält sich dieses Artefakt wie ein Spring Discovery-Client und registriert sich auf dem an diesen Dienst angehängten Eureka-Server.

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

Client-Konfiguration

Erstellen Sie eine Datei mit dem Namen application.yml im Verzeichnis src\main\resources und fügen Sie die folgenden Zeilen hinzu. Diese Konfigurationen sind dem Dienst sehr ähnlich, mit Ausnahme der Portnummer und des Dienstnamens.

REST-API hinzufügen, die die REST-API des Student Service verwendet

Fügen Sie nun einen RestController hinzu und machen Sie einen Rest-Endpunkt verfügbar, um Schuldetails abzurufen. Dieser Endpunkt verwendet die URL im Diensterkennungsstil unter Verwendung des Anwendungsnamens anstelle der vollständigen URL mit host: port.

Auf diese Weise können wir bestimmte Dienstkonfigurationen entfernen und dem hier bereitgestellten Eureka-Server und der Rest-Vorlage die Verantwortung für das Nachschlagen des Dienstes übertragen. Wir können hier auch den Lastausgleich anwenden (siehe @LoadBalanced Annotation ), wenn mehrere Instanzen für denselben Dienst ausgeführt werden.

Die URL, die wir verwendet haben, ist . Offensichtlich verwenden wir nur den Dienstnamen student-service anstelle von host:port . Dies wird intern von Spring Framework, Eureka Server und Rest Template zusammen gehandhabt.

Demo von Service Discovery und Aufruf

Starten Sie nun auch den Schuldienst. Alle drei Dienste werden gestartet. Überprüfen Sie die Eureka Server-Konsole. Sowohl die Schüler- als auch die Schuldienste müssen dort registriert sein.

Eureka-Konsole mit beiden registrierten Diensten

Gehen Sie zum Browser und gehen Sie zu http://localhost:9098//getSchoolDetails/abcschool, es werden die Schuldetails für eine bestimmte Schule abcschool Details. Wir haben intern den Studentenservice in Anspruch genommen. Die Antwort sieht im Browser so aus:

Antwort des Schuldienstes

Dinge zu überprüfen, ob ein Fehler vorliegt

  1. Anmerkungen @EnableEurekaServer und @EnableEurekaClient sind das Herzstück des Anwendungsökosystems. Ohne diese beiden Dinge wird es überhaupt nicht funktionieren.
  2. Stellen Sie sicher, dass zum Zeitpunkt des Starts des config-Client-Dienstes der eureka Server-Dienst bereits ausgeführt wird, da sonst die Registrierung einige Zeit in Anspruch nehmen kann, was beim Testen zu Verwirrung führen kann.

Zusammenfassung

Wir haben gesehen, wie einfach man Service Registry und Discovery Server sowie Clients effizient bereitstellen kann. Spring Framework verwaltet viele Dinge intern. Hier verwenden wir nur ein paar Anmerkungen und eine sehr minimale Konfiguration, um das Ganze schnell zu erreichen.