Eureka Server avec 3 Microservices
Qu'est-ce que Spring Cloud Eureka Server ?
Spring Cloud Eureka Server est un service de découverte (Service Discovery) qui permet aux microservices de se trouver automatiquement dans un réseau. Imaginez-le comme un annuaire téléphonique où chaque microservice s'inscrit et peut trouver les autres services.
Avantages principaux :
- Auto-découverte : Les services se trouvent automatiquement
- Load balancing : Distribution intelligente des charges
- Haute disponibilité : Tolérance aux pannes
- Scalabilité : Ajout facile de nouveaux services
Exemple
Prérequis Détaillés
1 Outils nécessaires :
- Java JDK 11+ : Langage de programmation principal
- Maven 3.6+ : Outil de gestion de dépendances
- IDE : IntelliJ IDEA, Eclipse, ou VS Code
- Postman ou curl : Pour tester les APIs
Installation étape par étape
Sur Windows :
- Télécharger et installer Java depuis Oracle
- Télécharger Apache Maven depuis le site officiel
- Ajouter Java et Maven au PATH système
Partie 1 : Créer le Eureka Server
1 Créer le projet Eureka Server
Utilisez Spring Initializr (https://start.spring.io) pour créer le projet :
- Project : Maven Project
- Dependencies : Eureka Server,web,devtools,actuator
- Artifact : eureka-server
Fichier pom.xml du Eureka Server :
2 Configuration du Eureka Server avec .properties
Fichier application.properties du Eureka Server :
Explication détaillée des propriétés :
server.port=8761: Le port 8761 est conventionnel pour Eureka Servereureka.client.register-with-eureka=false: Le serveur ne s'enregistre pas lui-mêmeeureka.client.fetch-registry=false: Le serveur ne récupère pas le registreeureka.server.enable-self-preservation=false: Désactive la protection en développement
3 Classe principale du Eureka Server
Comprendre les annotations
@SpringBootApplication: Combine plusieurs annotations Spring importantes@EnableEurekaServer: Transforme l'application en Eureka ServerSpringApplication.run(): Démarre l'application Spring Boot
4 Tester le Eureka Server
Démarrer le Eureka Server :
Accéder à l'interface web du Eureka Server :
Interface Eureka Server :
L'interface montre :
- System Status : État du système
- Instances currently registered with Eureka : Services enregistrés
- General Info : Informations générales
- Instance Info : Détails de l'instance
Partie 2 : Créer les Microservices Eureka Clients
1 Créer les microservices avec Eureka Client
Pour chaque microservice (A, B, C), créez un projet Spring Boot avec les dépendances :
- Spring Web : Pour les endpoints REST
- Eureka Discovery Client : Pour s'enregistrer auprès d'Eureka
- Actuator : Pour le monitoring
Fichier pom.xml commun pour les microservices :
2 Configuration des microservices avec .properties
Fichier application.properties pour Service A :
Différence entre register-with-eureka et fetch-registry
register-with-eureka=true: Ce service s'enregistre auprès d'Eurekafetch-registry=true: Ce service récupère la liste des autres services
Fichiers similaires pour Service B et Service C avec :
- Service B :
server.port=8082etspring.application.name=service-b - Service C :
server.port=8083etspring.application.name=service-c
3 Classes principales des microservices
Service A (ServiceAApplication.java) :
Comprendre @LoadBalanced
@LoadBalanced: Active le load balancing côté client- Utilisez
http://service-name/endpointau lieu d'URLs fixes - Eureka résout automatiquement le nom en adresse IP:port
4 Classes pour Service B et Service C
Service B (ServiceBApplication.java) :
Service C (ServiceCApplication.java) :
Partie 3 : Tester l'Architecture Eureka
1 Démarrer l'ensemble du système
Ordre de démarrage important :
- Eureka Server : Doit démarrer en premier
- Microservices : Peuvent démarrer ensuite (dans n'importe quel ordre)
Terminal 1 : Démarrer Eureka Server
Terminal 2 : Démarrer Service A
Terminal 3 : Démarrer Service B
Terminal 4 : Démarrer Service C
2 Vérifier l'enregistrement dans Eureka
Accédez à l'interface web de Eureka :
Vous devriez voir quelque chose comme :
Signification des statuts :
- UP : Service en cours d'exécution
- DOWN : Service arrêté ou inaccessible
- STARTING : Service en cours de démarrage
3 Tester les communications entre services
Testez les endpoints des microservices :
Tester Service A :
Tester Service B :
Tester Service C :
4 Simuler une panne de service
Arrêtez un service et observez le comportement :
Comportement attendu :
- Eureka détecte automatiquement la panne
- Les services arrêtent d'essayer de communiquer avec le service mort
- Le load balancing évite automatiquement le service indisponible
Partie 4 : Configuration Avancée Eureka
1 Eureka Server Haute Disponibilité
Pour la production, configurez plusieurs instances de Eureka Server :
Fichier application-peer1.properties :
Fichier application-peer2.properties :
Démarrer les deux instances :
2 Configuration de sécurité Eureka
Ajoutez la dépendance Spring Security :
Configuration de sécurité dans application.properties :
Classe de configuration de sécurité :
3 Configuration avancée des clients
Configuration complète pour les microservices :
4 Load Balancing personnalisé
Configuration avancée du load balancing :
Meilleures Pratiques et Améliorations
1 Structure de configuration optimale
2 Sécurité avancée
- HTTPS : Utilisez HTTPS pour toutes les communications
- Authentification : Protégez l'accès avec OAuth2 ou JWT
- ACL : Contrôle d'accès basé sur les services
- Monitoring : Surveillez les accès et les anomalies
Configuration de sécurité HTTPS :
3 Performance et monitoring
- Caching : Activez le cache des registres
- Compression : Utilisez la compression GZIP
- Timeouts : Configurez des timeouts appropriés
- Monitoring : Surveillez avec Actuator et Prometheus
Configuration de performance :
4 Gestion des erreurs et fallback
Configuration robuste avec fallback :
Dépannage
1 Services non enregistrés dans Eureka
Symptôme : Services UP mais absents de l'interface Eureka
Cause possible : Configuration incorrecte de l'URL Eureka
Solution :
- Vérifiez
eureka.client.service-url.defaultZonedansapplication.properties - Assurez-vous que le Eureka Server est démarré
- Vérifiez que
eureka.client.register-with-eureka=true - Consultez les logs du microservice
2 Erreurs de communication entre services
Symptôme : "UnknownHostException" ou "Connection refused"
Cause possible : Nom de service incorrect ou service indisponible
Solution :
- Vérifiez que vous utilisez le bon nom de service (spring.application.name)
- Assurez-vous que le service cible est démarré et enregistré
- Vérifiez que
@LoadBalancedest présent sur RestTemplate - Testez avec
http://localhost:8761/eureka/apps
3 Services marqués comme DOWN
Symptôme : Services affichés en rouge (DOWN) dans Eureka
Cause possible : Endpoint de santé inaccessible ou en échec
Solution :
- Vérifiez que l'endpoint
/actuator/healthrépond correctement - Assurez-vous que le port est accessible
- Vérifiez les logs du service pour les erreurs
- Augmentez
eureka.instance.lease-expiration-duration-in-seconds
4 Problèmes de load balancing
Symptôme : Toujours le même service appelé ou erreurs aléatoires
Cause possible : Configuration manquante de @LoadBalanced
Solution :
- Vérifiez que RestTemplate est annoté avec
@LoadBalanced - Assurez-vous d'utiliser le nom logique du service
- Vérifiez la configuration des timeouts
- Testez avec plusieurs instances du même service
Conclusion et Prochaines Étapes
1 Résumé de ce que vous avez appris
Dans ce tutoriel complet, vous avez appris à :
- Implémenter un Spring Cloud Eureka Server pour la découverte de services
- Créer trois microservices qui s'enregistrent automatiquement
- Utiliser le load balancing client avec
@LoadBalanced - Communiquer entre services via leurs noms logiques
- Appliquer les meilleures pratiques de sécurité et de performance
- Dépanner les problèmes courants de découverte de services
2 Prochaines étapes pour approfondir
- Spring Cloud Gateway : API Gateway pour router les requêtes
- Spring Cloud Config Server : Gestion centralisée des configurations
- Spring Cloud Circuit Breaker : Résilience avec Hystrix ou Resilience4j
- Docker : Conteneurisation de vos microservices
- Kubernetes : Orchestration des conteneurs