Comprendre Spring Cloud Config Server avec un exemple

View more categories:

1- Objectifs de cette leçon

OK, voici la première étape pour que vous contruisiez une application distribuée en utilisant  Spring Cloud. Dans cette leçon, je vous donnerai des instructions de la création d'un service pour manager d'une configuration d'autres services.
Les contenus seront discutés dans cette leçon y compris:
  1. Qu'est-ce que Config Server ? Pourquoi avez-vous besoin de Config Server dans des applications distribuées.
  2. Exlication de la Gestion centralisée des configurations (Centralized Configuration management), et gestion de version / gestion de configuration (Versioned Configuration Management).
  3. Établissement d'un répertoire (Repository), pour stocker l'information de configuration.
  4. Construction (Build) et Exécution (Run) de Spring Cloud Config Server.

2- Config Server - Why?

OK, nous allons maintenant discuter pourquoi vous avez besoin d'un service qui gère les configurations pour d'autres services dans une application distribuée (Distributed Application).
Voici l'illustration d'une application distribuée - " Taxi Management", comprenant trois sous-applications, chacune étant déployée sur un serveur.
Chaque service (application) est un projet développé par une équipe de développeurs. Dans un projet, af part du code, il contient des configurations, par exemple, des informations connectées à la base de données, des informations sur l'emplacement des sources de données, etc .. Ce sera une mauvaise idée si vous codez en dur (hard code) ces informations dans le code du projet. Par conséquent, cette information est normalement placée dans des fichiers séparés, appelés fichiers de configuration (Configuration file).
Une fois terminé, le projet sera emballé (pack) et déployé sur le Serveur. Normalement, les fichiers de configuration seront regroupés ensemle avec le code et formeront un produit unique (fichier). Ainsi, s'il y a des changements de la configuration, vous devez compiler (compile) et emballer (pack) ce projet et le redéployer sur le serveur. C'est évidemment un défi dans un système de programmation distribué.

Config Server?

L'idée pour résoudre le problème ci-dessus est qu'un service (application) est nécessaire de gérer les configurations pour d'autres services. Il fonctionne indépendamment sur un serveur.
Ces idées ci-dessus apportent les bénifices suivants :
  • TODO
  • Spring Cloud Bus:
Lorsque vous changez un fichier de configuration sur  Config-Server, vous voudrez sûrement informer ces changements aux Clients. Le Spring Cloud Bus fournit un mécanisme permettant d'informer les Clients que' "il y a un changement" et demande des Clients de mettre à jour les nouvelles informations.

3- Comment Config Server sauvegarde-t-il des données ?

Lorsque vous mettez tous les fichiers de configuration sur  Config Server, vous vous poserez la question comment  Config Server les stocke ?
Il y a deux manières principales que  Config Server emmagasine ces fichiers de configuration :
  1. Il les stocke sur le disque dur du serveur comme des fichiers du système  (Files system).
  2. Il utilise GIT ou SVN (Subversion).
Dans cette leçon, je vais créer un  Config Server, qui emmagasine des fichiers de configurations sur  GitHub. J'ai créé un  GitHub Repository (Le répertoire) :

4- Créer le projet Spring Boot

Sur  Eclipse créez un projet  Spring Boot:
Saisissez :
  • Name: SpringCloudConfigServer
  • Group: org.o7planning
  • Artifact: SpringCloudConfigServer
  • Description: Spring Cloud Config Server
  • Package: org.o7planning.scconfigserver
La version d'essai  Spring Boot  2.0.0.M..xx est buggée avec   Spring Cloud par conséquent, nous allons utiliser la version  Spring Boot 1.5.9.
OK, le projet a été créé :
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>SpringCloudConfigServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringCloudConfigServer</name>
    <description>Spring Cloud Config 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-config-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>

@EnableConfigServer

SpringCloudConfigServerApplication.java
package org.o7planning.scconfigserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer  // ==> Important!!
@SpringBootApplication
public class SpringCloudConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigServerApplication.class, args);
    }
    
}

5- Configurer Config Server

Ce service (application) sera déployé et exécute sur le port  8888 et stocke des fichiers de configurations sur  GitHub, alors, vous avez besoin de certaines configurations dans le fichier  application.properties.
application.properties
server.port=8888

spring.cloud.config.server.git.uri=https://github.com/o7planning/spring-cloud-config-git-repo-example.git

# For File System:
# spring.profiles.active=native
# spring.cloud.config.server.native.searchLocations=C:/Users/tran/Desktop/config
 
Si  Git Server (Ou  SVN Server) exige un  username/password vous devez donc faire des configurations supplémentaires, vous pouvez faire des références dans l'annexe à la fin de cet article.

6- Exécuter l'application

Cliquez sur le bouton droit du projet et sélectionnez :
  • Run As/Spring Boot App

Test:

Le prochaine leçon :

View more categories: