devstory

Comprendre Spring Cloud Eureka Server avec un exemple

  1. Eureka Server - Pourquoi ?
  2. L'objectif de la leçon
  3. Créer le projet Spring Boot
  4. @EnableEurekaServer
  5. Exécuter l'applicatiuon sur Eclipse
  6. Exécuter plusieurs répliques (replica)
  7. Eureka Discovery (Eureka Client)

1. Eureka Server - Pourquoi ?

OK, je suis sûr que vous avez déjà utilisé une application de Chat pour parler à vos amis sur Internet. Lorsque vous vous connectez à l'application Chat sur votre ordinateur, que se passera-t-il ?
  • Vous vous connectez à l'application Chat, cela signifie que vous avez informé au Chat Server (Le serveur Chat) que vous êtes en ligne.
  • Chat Server vous fournit une liste d'autres internautes, ils apparaissent en ligne (online) ou hors ligne (offline).
  • Et donc vous avez "découvert" (Discovered) la liste des personnes en ligne. Et les autres vous voir aussi paraitre en ligne.
En effet, lorsque le nombe d'utilisateur Chat augmente, le nombre Chat Server augmente également, et ils ont une manière de partager le statut des utilisateurs.
Vous construisez un système distribué qui consiste de grand nombre de services (applications) fonctionnant indépendamment sur différents serveurs. Pour que ces services puissent se communiquer, ils doivent se «découvrir» les uns les autres. Lors de cette découverte, ils peuvent s'appeler les uns les autres. Par conséquent, il doit y avoir quelque chose comme le Chat Server pour aider les services (applications) à enregistrer son existence.
C'est "Service Registration" (Enregistrement des services). Tous les services (applications) du système distribué doivent être enregistrés avec le "Service Enregistrement". C'est comme le fait que tous les habitants d'un pays doivent s'inscrire au certificat de naissance.
Il y a plusieurs technologies disponibles à votre choix pourque vous obtienniez un "Service Registration", Spring Cloud vous fournit certaines solutions technologiques comme ci-dessous :
  • Eureka
  • Zookeeper
  • Cloud Foundry
  • Consul

2. L'objectif de la leçon

Dans cette leçon, je vous donnerai des instructions de la création d'une Service Registration (Enregistrement des services) à l'aide de Spring Cloud Eureka Server.
Ce sera mieux si vous en apprendre plus d'informations sur le Netflix et Eureka introduit dans les leçons ci-dessous :
  • Tìm hiểu về Spring Cloud Netflix Eureka
Les problèmes à discuter dans cette leçon :
Étape 1 :
  • Créez un Service Registration (Enregistrement des services) utilisant Spring Cloud Eureka Server.
  • Exécutez cette application directement sur Eclipse et voyez Eureka Monitor (Le moniteur de Eureka).
Étape 2:
  • Créez des répliques (replica) de l'application à déployer sur différents serveurs. Chaque réplique (replica) exécutera un nom de domaine différent. Ici, nous supposons que le système a beaucoup d'utilisateurs, de nombreuses répliques sont nécessaires pour fonctionner sur différents serveurs afin de réduire la surcharge (Reduce overload).
  • Expliquez le mécanisme de partage d'état entre les Eureka Server.

3. Créer le projet Spring Boot

Sur Eclipse créez un projet Spring Boot :
Saississez :
  • Name: SpringCloudServiceRegistrationEurekaServer
  • Group: org.o7planning
  • Artifact: SpringCloudServiceRegistrationEurekaServer
  • Description: Spring Cloud Service Registration (Eureka Server)
  • Package: org.o7planning.eurekaserver
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
      http://maven.apache.org/xsd/maven-4.0.0.xsd">
      
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o7planning</groupId>
    <artifactId>SpringCloudServiceRegistrationEurekaServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringCloudServiceRegistrationEurekaServer</name>
    <description>Spring Cloud Service Registration (Eureka Server)</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

4. @EnableEurekaServer

Pourque cette application devienne un Service Registration (Enregistrement des services), vous devez utiliser @EnableEurekaServer. Cette annotation informe à Spring d'exécuter un service d'enregistrement par la technologie de Netflix (Netflix Eureka).
SpringCloudServiceRegistrationEurekaServerApplication.java
package org.o7planning.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class SpringCloudServiceRegistrationEurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudServiceRegistrationEurekaServerApplication.class, args);
    }
}
application.yml
---
# This default profile is used when running a single instance completely standalone:
spring:
  profiles: default
server:
  port: 9000  
eureka:
  instance:
    hostname: my-eureka-server.com
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    

# united-states, france, and vietnam illustrate running 3 intercommunicating instances.  
# This example has them running side-by-side on localhost
# -- which is unrealistic in production
# -- but does illustrate how multiple instances collaborate.
#
# Run by opening 3 separate command prompts:
# java -jar -Dspring.profiles.active=united-states SpringCloudServiceRegistrationEurekaServer.jar
# java -jar -Dspring.profiles.active=france SpringCloudServiceRegistrationEurekaServer.jar
# java -jar -Dspring.profiles.active=vietnam SpringCloudServiceRegistrationEurekaServer.jar

---
spring:
  profiles: united-states
  application:
    name: eureka-server-clustered   # ==> This is Service-Id
server:
  port: 9001  
eureka:
  instance:
    hostname: my-eureka-server-us.com    
  client:
    registerWithEureka: true
    fetchRegistry: true        
    serviceUrl:
      defaultZone: http://my-eureka-server-fr.com:9002/eureka/,http://my-eureka-server-vn.com:9003/eureka/

---
spring:
  profiles: france
  application:
    name: eureka-server-clustered   # ==> This is Service-Id   
server:
  port: 9002
eureka:
  instance:
    hostname: my-eureka-server-fr.com      
  client:
    registerWithEureka: true
    fetchRegistry: true        
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka/,http://my-eureka-server-vn.com:9003/eureka/

---
spring:
  profiles: vietnam
  application:
    name: eureka-server-clustered    # ==> This is Service-Id  
server:
  port: 9003
eureka:
  instance:
    hostname: my-eureka-server-vn.com    
  client:
    registerWithEureka: true
    fetchRegistry: true    
    serviceUrl:
      defaultZone: http://my-eureka-server-us.com:9001/eureka/,http://my-eureka-server-fr.com:9002/eureka/
Dans cette application, je configure sur le fichier application.yml au lieu d'utiliser application.properties, vous pouvez pour en apprendre davantage de la différence entre les deux fichiers *.yml et *.properties dans l'article ci-dessous :
  • properties vs yml

5. Exécuter l'applicatiuon sur Eclipse

Lorsque vous exécutez directement cette application sur Eclipse, le profil par défaut (default profile) sera utilisé pour configurer cette application.
Eureka Monitor (Le moniteur de Eureka) vous permet de voir la liste des services actifs et enregistrédans ce Eureka Server, et de voir les réplicques (replica) de cette application s'exécutant sur le système distribué. Vous pouvez accéder au Eureka Monitor par URL ci-dessous.
Le profil "default" (default profile) est configuré pour exécuter sur le nom du domaine my-eureka-server.com, à l'aide de la configuration du nom du domaine sur le fichier "hosts" que vous pouvez obtenir tel nom du domaine.
Sur Windows ouvrez le fichier :
  • C:\Windows\System32\drivers\etc\hosts
Ajoutez l'extrait de la configuration ci-dessous :
C:\Windows\System32\drivers\etc\hosts
127.0.0.1       my-eureka-server.com
127.0.0.1       my-eureka-server-us.com
127.0.0.1       my-eureka-server-fr.com
127.0.0.1       my-eureka-server-vn.com
Afin de modifier le fichier "hosts" dans d'autres système d'exploitation, vous pouvez voir les instructions suivantes :
Et vous avez obtenu le nom du domaine my-eureka.com, ol est à noter que ce nom du domaine ne fonctionne que sur votre ordinateur.

6. Exécuter plusieurs répliques (replica)

Toute d'abord, vous devez utiliser la fonction "Maven Install" pour créer le fichier jar. Cliquez sur le bouton droit du projet et sélectionnez :
  • Run As/Maven Install
Après l'exécution du "Maven Install" avec succès, vous obtenez un fichier jar situé dans le répertoire target du projet.
Copiez le fichier jar qui vient d'être créé dans un répertoir et créez trois fichiers BAT :
  • eureka-server-us.bat
  • eureka-server-fr.bat
  • eureka-server-vn.bat
my-eureka-server-us.bat
java -jar -Dspring.profiles.active=united-states SpringCloudServiceRegistrationEurekaServer-0.0.1-SNAPSHOT.jar
my-eureka-server-fr.bat
java -jar -Dspring.profiles.active=france SpringCloudServiceRegistrationEurekaServer-0.0.1-SNAPSHOT.jar
my-eureka-server-vn.bat
java -jar -Dspring.profiles.active=vietnam SpringCloudServiceRegistrationEurekaServer-0.0.1-SNAPSHOT.jar
Nous simulons la création de trois répliques (replica) et les déployons sur trois serveurs différents, avec trois noms de domaine différents.
Exécutez tous ces trois BAT mentionnés ci-dessus.
OK, maintenant vous pouvez accéder les liens ci-dessous et voir les résultats :

7. Eureka Discovery (Eureka Client)

OK, la prochaine leçon :