You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dans cet article, je vous présente mon projet de starter microservices basé sur l’écosystème **Spring Cloud**, incluant **Eureka**, **Cloud Config**, **Gateway**, **Axon**, **RabbitMQ**, et **PostgreSQL**. L’objectif est de fournir un exemple de configuration et d’implémentation entièrement réactive et scalable.
13
-
Dans un environnement 100% réactif avec **WebFlux** et **R2DBC**(Non bloquant), les microservices communiquent entre eux de manière asynchrone,
14
-
ce qui permet de gérer un grand nombre de requêtes simultanées.
12
+
Cet article présente le projet `spring-microservices-starter`, un socle technique destiné à simplifier la mise en place d’architectures microservices réactives et évolutives. Ce starter repose sur l’écosystème **Spring Cloud** et intègre des composants tels que **Eureka**, **Spring Cloud Config**, **Gateway**, **Axon Framework**, **RabbitMQ**, **PostgreSQL**, et **WebFlux** avec **R2DBC** pour assurer une communication non bloquante et entièrement asynchrone.
15
13
16
-
Le project est modulaire et évolutif disponible dans ici :
L’objectif est de fournir un modèle de démarrage robuste pour développer des microservices modulaires, scalables, et facilement maintenables. Il s’adresse aux équipes souhaitant adopter une architecture moderne et réactive en environnement distribué.
15
+
16
+
Le projet est disponible sur GitHub : [https://github.com/coundia/spring-microservices-starter](https://github.com/coundia/spring-microservices-starter)
18
17
19
18
## Sommaire
20
19
1.[Architecture Globale](#architecture-globale)
@@ -30,81 +29,77 @@ Le project est modulaire et évolutif disponible dans ici :
30
29
31
30
## Architecture Globale
32
31
33
-
Voici un aperçu de la structure du projet :
32
+
L’architecture repose sur les composants suivants :
-**Domain Layer** : Contient les entités, les valeurs d’objet, les agrégats, les événements, les commandes, les gestionnaires de commandes, les spécifications, les services de domaine, etc.
53
-
-**Application Layer** : Contient les services d’application, les gestionnaires de commandes, les gestionnaires de requêtes, les gestionnaires d’événements, etc.
54
-
-**Infrastructure Layer** : Contient les implémentations des interfaces de persistance, les implémentations des interfaces de messagerie, les implémentations des interfaces de configuration, etc.
55
-
-**Presentation Layer** : Contient les contrôleurs REST (@RestController)
52
+
-**Domain Layer** : Contient les entités, agrégats, événements, commandes, objets valeurs et services métier.
53
+
-**Application Layer** : Coordonne les opérations métier via des gestionnaires de commandes, d’événements et de requêtes.
54
+
-**Infrastructure Layer** : Implémente les interfaces techniques (base de données, messaging, configuration).
55
+
-**Presentation Layer** : Fournit les API REST pour l’exposition externe.
56
56
57
57
## Services Principaux
58
58
59
59
### Cloud Config Server
60
-
Ce service charge la configuration depuis un dépôt Git local ou distant. L’application consomme ensuite cette configuration au démarrage pour centraliser et uniformiser la configuration.
60
+
Centralise la configuration des microservices à partir d’un dépôt Git local ou distant. Cela permet une uniformisation et une gestion centralisée de la configuration.
61
61
62
62
### Eureka
63
-
Chaque service s’enregistre auprès de **Eureka** et peut ensuite découvrir les autres services par leur nom logique, sans avoir à connaître les adresses réseau exactes.
63
+
Chaque microservice s’enregistre auprès d’Eureka et peut découvrir les autres services par leur nom, sans dépendance à une adresse IP ou un port statique.
64
64
65
65
### Gateway
66
-
Permet de centraliser toutes les requêtes sortantes et entrantes.
67
-
Les clients externes n’ont accès qu’au Gateway, qui fait office de passerelle.
68
-
Il gère également la résilience avec **Resilience4j**
66
+
Fait office de passerelle unique pour toutes les requêtes entrantes. Il intègre des mécanismes de résilience avec **Resilience4j**.
69
67
70
68
### Product-Command
71
-
C’est le microservice pour les opérations d’écriture (Create, Update, Delete) sur les produits. Il peut utiliser **Axon** et **RabbitMQ** pour émettre des événements.
69
+
Responsable des opérations de modification des produits. Il utilise **Axon**pour la gestion des commandes et des événements, et **RabbitMQ** pour la communication inter-services.
72
70
73
71
### Product-Query
74
-
Ce microservice expose des requêtes en lecture pour récupérer la liste ou le détail des produits.
72
+
Expose les données en lecture via des projections. Repose sur **R2DBC**pour l’accès non bloquant à la base PostgreSQL.
75
73
76
74
## Configuration Eureka
77
75
78
-
Voici un extrait typique du`application.properties` pour Eureka :
76
+
Extrait du fichier`application.properties` pour Eureka :
79
77
80
78
```properties
81
79
spring.application.name=eureka
82
80
server.port=8761
83
-
84
-
# Désactive la découverte pour lui-même
85
81
eureka.client.register-with-eureka=false
86
-
87
-
# eureka.client.fetch-registry=false car c’est le serveur
Dans le dépôt local `config-repo/`, on placera les fichiers `gateway-server.properties`, `product-command.properties`, etc., pour centraliser la configuration.
98
+
Les fichiers de configuration centralisés (ex: `gateway-server.properties`, `product-command.properties`) sont placés dans ce dépôt.
104
99
105
100
## Configuration du Gateway
106
101
107
-
Le Gateway utilise les routes pour rediriger les requêtes vers les microservices :
102
+
Configuration typique du Gateway avec découverte de service :
Pour vous assurer que seuls les appels venant du Gateway sont autorisés, vous pouvez ajouter un header spécifique (ex. `X-Gateway-Auth`) via un **Route Filter** ou un **Global Filter** dans Gateway, et vérifier la présence de ce header côté microservices :
139
+
Pour garantir que seuls les appels issus du Gateway accèdent aux microservices, un header spécifique (`X-Gateway-Auth`) peut être ajouté via un **Route Filter**:
Ce starter fournit une architecture solide basée sur **Spring Cloud**, **Axon**, **RabbitMQ**, et **PostgreSQL**.
162
-
L’objectif est de montrer comment mettre en place une infrastructure microservices réactive, scalable et maintenable. Vous pouvez cloner ce projet, personnaliser la configuration, et ajouter vos propres fonctionnalités pour répondre à vos besoins métiers.
156
+
Le projet `spring-microservices-starter` constitue une base solide pour développer des systèmes microservices modernes, réactifs et résilients. Grâce à une architecture modulaire, à l’intégration de composants éprouvés, et à l’adoption de principes comme le DDD et le CQRS, il permet d’industrialiser rapidement le développement de services métiers robustes. Il peut être utilisé tel quel ou adapté aux besoins spécifiques d’une organisation.
'spécialisé dans la création d\'applications performantes et centrées sur'+
5
-
' l\'utilisateur avec Angular, CSS [Tailwind].'+
6
-
' Mon expertise s\'étend également au back-end Java (Spring), Travaillé sur des projets avec PHP,'+
7
-
' ainsi qu\'aux architectures comme DDD, CQRS etc.'+
8
-
' Disponible pour collaborer sur '+
9
-
'de nouveaux projets stimulants et innovants qui apporte une valeur reel sur la société.',
3
+
'presentation': 'Développeur expérimenté,'+
4
+
' spécialisé dans la création d’applications performantes et centrées '+
5
+
'sur l’utilisateur avec Angular et Tailwind CSS. Une expertise étendue '+
6
+
'côté back-end avec Java (Spring), PHP, ainsi que dans les architectures modernes'+
7
+
' telles que DDD et CQRS. Ouvert aux collaborations sur des projets innovants et à fort impact sociétal.',
10
8
'projects': 'Projets',
11
9
'services': 'Services',
12
10
'contact-me': 'Contactez-moi',
13
-
'contact-text': 'Je suis ravi de vous entendre ! Remplissez ce formulaire '+
14
-
'pour m\'envoyer vos questions, commentaires ou suggestions, même de façon anonyme.'+
15
-
' Je vous répondrai dans les plus brefs délais.\n\n',
11
+
'contact-text': 'Heureux de recevoir vos messages ! Remplissez ce formulaire pour poser des questions, partager des commentaires ou suggestions, même de manière anonyme. Une réponse sera apportée dans les plus brefs délais.\n\n',
0 commit comments