Articles

Découverte du service Cloud Spring avec Netflix Eureka

Apprenez à créer un microservice, basé sur Spring cloud, sur le serveur de registre Netflix Eureka et comment d’autres microservices (clients Eureka) l’utilisent pour enregistrer et découvrir des services pour appeler leurs API.

Nous utiliserons l’API Spring Cloud basée sur Spring Boot. Nous utiliserons Netflix Eureka server pour créer le serveur de registre de services et les clients Eureka qui s’enregistreront et découvriront d’autres services pour appeler des API REST.

Aperçu

Nous allons créer trois microservices pour cet exemple Netflix Eureka.

  1. Serveur de registre de service Eureka – Ce microservice fournira le registre de service et le serveur de découverte.
  2. Microservice étudiant – Ce qui donnera des fonctionnalités basées sur l’entité étudiante. Ce sera un service basé sur rest et, surtout, ce sera un service client eureka, qui discutera avec eureka service pour s’inscrire dans le registre des services.
  3. Microservice scolaire – Même type que le service étudiant – la seule fonctionnalité ajoutée est qu’il appellera le service étudiant avec un mécanisme de recherche de service. Nous n’utiliserons pas l’URL absolue du service étudiant pour interagir avec ce service.

Voici le diagramme d’interaction entre les trois services énumérés ci-dessus.

Interaction des composants entre eux

Pile technique et Runtime

  • Java 1.8
  • Eclipse ID
  • 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

Qu’est-ce que le serveur et les clients Netflix Eureka ?

Comme nous le savons de nos jours, il y a beaucoup d’élan autour des Microservices. Le passage d’une architecture monolithique à une architecture basée sur des Microservices offre de nombreux avantages pour l’avenir en termes de maintenabilité, d’évolutivité, de haute disponibilité, etc. Cependant, en même temps, il y a de nombreux défis également lors de cette migration. L’un d’eux consiste à maintenir des adresses de microservices individuelles. Cette tâche peut être extrêmement complexe – en fonction du nombre de services et de leur nature dynamique. Si l’infrastructure entière est distribuée et qu’il y a également une réplication, la maintenance de ces adresses de service devient plus difficile.

Pour résoudre ce problème, dans l’informatique distribuée, il existe un concept appelé « Enregistrement et découverte de services » où un serveur dédié est chargé de maintenir le registre de tous les Microservices qui ont été déployés et supprimés. Cela agira comme un annuaire téléphonique de toutes les autres applications / microservices.

Considérez-le comme un service de recherche où les microservices (clients) peuvent s’enregistrer et découvrir d’autres microservices enregistrés. Lorsqu’un microservice client s’enregistre auprès d’Eureka, il fournit des métadonnées telles que l’hôte, le port et l’indicateur de santé, permettant ainsi à d’autres microservices de le découvrir. Le serveur de découverte attend un message de battement de cœur régulier de chaque instance de microservice. Si une instance commence à ne pas envoyer systématiquement de battement de cœur, le serveur de découverte supprimera l’instance de son registre. De cette façon, nous aurons un écosystème très stable de Microservices collaborant les uns avec les autres, et en plus, nous n’aurons pas à maintenir manuellement l’adresse d’autres Microservices, ce qui est une tâche presque impossible si la montée / descente est très fréquente, à la demande et nous utilisons virtual host pour héberger les services spécialement dans l’environnement cloud.

Eureka Service Registry Server

Suivez ces étapes pour créer et exécuter Eureka server.

Créer un serveur Eureka

Créer un projet Spring boot à partir du portail Spring Boot initializer avec deux dépendances, c’est-à-dire Eureka server et Actuator. Donnez d’autres coordonnées maven GAV et téléchargez le projet.

Génération de projet de service de serveur Eureka

Décompressez et importez le projet dans Eclipse en tant que projet maven existant. Dans cette étape, toutes les dépendances nécessaires seront téléchargées à partir du référentiel maven.

Ouvrez maintenant la classe SpringEurekaServerApplication que spring a déjà générée dans le projet téléchargé et ajoutez l’annotation @EnableEurekaServer sur la 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); }}

Construisez à nouveau le projet. Avec cette annotation, cet artefact agira comme un registre de microservices et un serveur de découverte.

Configuration du serveur

Créez un fichier appelé application.yml dans le répertoire src\main\resources. Ajoutez ces propriétés –

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

Créez un autre fichier appelé bootstrap.yml dans le répertoire src\main\resources. Ajoutez ces propriétés –

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

Testez le serveur Eureka

Démarrez l’application en tant qu’application de démarrage à ressort. Ouvrez le navigateur et allez à , vous devriez voir la page d’accueil du serveur eureka qui ressemble ci-dessous.

Console Eureka Sans Client

Veuillez noter qu’à ce stade, aucun service n’est enregistré ici, ce qui est attendu et une fois que nous ferons tourner les services clients, ce serveur sera automatiquement mis à jour avec les détails de les services à la clientèle.

Eureka Client–Student Service

Suivez ces étapes pour créer et exécuter Eureka client exécutant student service.

Créer un projet client Eureka

Créer un projet de démarrage à partir du portail d’initialisation avec quatre dépendances, c’est-à-dire ActuatorWebRest RepositoriesEureka Discovery. Donnez d’autres coordonnées maven GAV et téléchargez le projet.

Génération de projet client –
Microservice étudiant

Décompressez et importez le projet dans Eclipse en tant que projet maven existant.

Ajoutez maintenant l’annotation @EnableEurekaClient sur la classe d’application Spring boot présente dans le dossier src. Avec cette annotation, cet artefact agira comme un client spring discovery et s’enregistrera sur le serveur eureka attaché à ce service.

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

Configuration client

Créez un fichier appelé application.yml dans le répertoire src\main\resources et ajoutez les lignes ci-dessous.

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

Ajoutez l’API REST

Ajoutez maintenant un RestController et exposez un point de terminaison rest pour obtenir tous les détails de l’élève pour une école particulière. Ici, nous exposons le point de terminaison /getStudentDetailsForSchool/{schoolname} pour servir l’objectif commercial. Pour plus de simplicité, nous codons en dur les détails de l’étudiant.

Studentla classe est un simple POJO.

Test Client Eureka

Lancez ce projet en tant qu’application spring boot. Vérifiez maintenant que ce service a été enregistré automatiquement sur le serveur Eureka. Accédez à la console de service Eureka et actualisez la page. Maintenant, si tout se passe bien, nous verrons une entrée pour le service aux étudiants dans la console de service eureka. Cela indique que le serveur et le client Eureka se connaissent.

Console Eureka avec service étudiant enregistré

Nous allons maintenant vérifier que le point de terminaison /getStudentDetailsForSchool/{schoolname} est opérationnel. Allez dans le navigateur et allez dans , il donnera les détails de l’élève pour une école particulière abcschool.

Réponse du service étudiant

Service client–école Eureka

Maintenant, nous allons créer un service scolaire qui s’enregistrera avec le serveur eureka – et il découvrira et appelez le service étudiant sans chemin d’URL codé en dur.

Suivez les étapes exactes de création du service étudiant, pour créer et exécuter également le service scolaire en cours d’exécution du client Eureka.

Créer un projet client Eureka

Créer un projet de démarrage à partir du portail d’initialisation avec quatre dépendances, c’est-à-dire ActuatorWebRest RepositoriesEureka Discovery. Donnez d’autres coordonnées maven GAV et téléchargez le projet.

Décompressez et importez le projet dans Eclipse en tant que projet maven existant.

Ajoutez maintenant l’annotation @EnableEurekaClient sur la classe d’application Spring boot présente dans le dossier src. Avec cette annotation, cet artefact agira comme un client spring discovery et s’enregistrera sur le serveur eureka attaché à ce service.

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

Configuration client

Créez un fichier appelé application.yml dans le répertoire src\main\resources et ajoutez les lignes ci-dessous. Ces configurations sont très similaires au service étudiant, à l’exception du numéro de port et du nom du service.

Ajoutez une API REST qui consomme l’API REST du service étudiant

Ajoutez maintenant un RestController et exposez un point de terminaison rest pour obtenir les détails de l’école. Ce point de terminaison utilisera l’URL de style de découverte de service en utilisant le nom de l’application, à la place de l’URL complète avec host:port.

De cette façon, nous pouvons nous débarrasser de la configuration de service spécifique et nous pouvons confier la responsabilité de la recherche de service au serveur eureka et au modèle rest fournis ici. Nous pouvons également appliquer l’équilibrage de charge (voir l’annotation @LoadBalanced) ici si plusieurs instances s’exécutent pour le même service.

L’URL que nous avons utilisée est . Il est clair que nous utilisons uniquement le nom de service student-service à la place de host:port. Cela sera géré en interne par spring framework, eureka server et rest template ensemble.

Démonstration de la découverte du service et de l’appel

Maintenant, démarrez également le service scolaire. Les trois services sont lancés. Vérifiez la console du serveur eureka. Bles services aux élèves et aux écoles doivent y être enregistrés.

Console Eureka avec les deux services enregistrés

Allez dans le navigateur et allez dans http://localhost:9098//getSchoolDetails/abcschool, il sera donnez les détails de l’école pour une école particulière abcschool details. Nous avons invoqué le service aux étudiants en interne. La réponse ressemblera dans le navigateur:

Réponse du service scolaire

Choses à vérifier si vous rencontrez une erreur

  1. Annotations @EnableEurekaServer et @EnableEurekaClient sont le cœur de l’écosystème applicatif. Sans ces deux choses ne fonctionneront pas du tout.
  2. Assurez-vous qu’au moment du démarrage du service client config, le service serveur eureka est déjà en cours d’exécution, sinon l’enregistrement pourrait prendre un certain temps, ce qui pourrait créer de la confusion lors des tests.

Résumé

Nous avons vu avec quelle facilité on peut déployer le registre de service et le serveur de découverte ainsi que les clients efficacement. Spring framework maintient beaucoup de choses en interne. Ici, nous utilisons juste quelques annotations et une configuration très minimale pour réaliser le tout rapidement.