Deleting the wiki page 'Application avec des microservices avec Spring Cloud OpenFeign' cannot be undone. Continue?
Nous mettons en place une application orientée microservices avec Spring Boot et Spring Cloud OpenFeign. Dans cette application nous simulons un scénario de gestion suivant:
L’application est consistituée de deux types microservices:
Les répertoires des microservices métiers:
Les répertoires des microservices qui font fonctionner les microservices métiers:
Chaque microservice métier possède ses propres ressources
1) Une adresse (classe Address) est finie par:
address ID Long
numero int
street name String
city String
country String
2) Un employée (classe Employee) est défini par:
employee ID Long
firstname String
lastname String
email String
created date Date
birth country String
address Address
3) Une société (classe Company) est définie par:
company ID Long
company ame String
company type Type (Enum: CLIENT/PROSPECT)
4) Un projet (classe Project) est defini par:
project ID Long,
project name String
priority Priority (Enum: P1/P2/P3/...)
description String
starting date Date,
state State (Enum: END/IN_PROGRESS)
company Company
employee Employee
La figure présente le diagramme de classe de l’application
Pour le fonctionnement de l’applications, les microservices métiers interagissent entre eux. Par exemple:
Pour faire échanger les données entre microservices nous utilisons le pattern Spring Cloud OpenFeign. openfeign.
Comparé à Spring Boot RestTemplate, Spring Cloud OpenFeign présente plusieurs avantages:
git clone
https://gitea.natan.fr/placidenduwayo/microservices-with-spring-cloud-openfeign.git`Tous les microservices métiers et les microservices intermédiaires sont téléchargés dans ce répertoire. Il faut avoir l’application Docker installée sur la machine pour créer les images docker des microservices et docker-compose pour agencer et lancer en une seule ligne de commandes les images de toute l’application. Pour en savoir sur docker et docker-compose, visiter les liens et docker-compose
docker-compose build
:
docker-compose build
va builder tout le code source de chaque microservicedocker-compose up
. Cette ligne de commande va lancer toutes les images agencer dans le fichier docker-composeLes microservices eureka-discovery-server et spring-cloud-gateway-service sont de simples applications qui n’exposent aucun Endpoint.
Ce service joue le rôle de serveur d’annuaire des microservices. eureka-discovery-server est lancé en premier. Lorsqu’ils sont lancés, les microservices métiers address-microservice, employee-microservice, company-microservice et project-microservice s’enregistrent dans l’annuaire. Ils s’enregistrent par leur nom qui a été indiqué dans leur fichier de configuration application.properties. Exemple: spring.application.name = address-service.
Le lien suivant présente la documentation de ce service d’annuaire eureka service registration.
La figure suivante présente l’architecture et le fonctionnement de l’application :.
Le serveur d’annuaire eureka-discover-server possède une page web pour consulter les différents microservices qui se sont enregistrés dans son annuaire.
Avec Postman, on teste l’application avec les services qu’elle met en disposition des clients.
Pour les test nn local, le service gateway demarre sur l’addresse http://localhost:8888/
Dans Postman:
La requête POST pour créer une adresse
[POST]/http://localhost:8888/ADDRESS-SERVICE/addresses
Le body de la requête:
{
"numHouse": 44,
"streetName":"Rue notre Dame des Victoires",
"pb":75002,
"city":"Paris",
"country":"France"
}
[GET]/http://localhost:8888/ADDRESS-SERVICE/addresses
[GET]/http://localhost:8888/ADDRESS-SERVICE/addresses/{addressID}
[DELETE]/http://localhost:8888/ADDRESS-SERVICE/addresses/{addressID}
[DELETE]/http://localhost:8888/ADDRESS-SERVICE/addresses
La requête PUT pour modifier une adresse
[PUT]/http://localhost:8888/ADDRESS-SERVICE/addresses/{addressID}
Exemple du body de la requête:
{
"addressID":1
"numHouse": 44,
"streetName":"Rue notre Dame des Victoires",
"pb":75002,
"city":"Paris",
"country":"France"
}
La requête POST pour créer une employée
[POST]/http://localhost:8888/EMPLOYEE-SERVICE/employees/addresses/{addressID}
Exemple du body de la requête:
{
"firstname":"Placide",
"lastname":"Nduwayo",
"birthCountry":"Burundi"
}
Retour de la requête:
{
"employeeID": 7,
"firstname": "Placide",
"lastname": "NDUWAYO",
"email": "placide.nduwayo@natan.fr",
"createdDate": "2022-09-13 : 10:07:52",
"birthCountry": "Burundi",
"addressID": 1,
"address": {
"addressID": 1,
"numHouse": 44,
"streetName": "Rue Notre Dame des Victoires",
"pb": 75002,
"city": "Paris",
"country": "France"
}
}
[GET]/http://localhost:8888/EMPLOYEES-SERVICE/employees
[GET]/http://localhost:8888/EMPLOYEES-SERVICE/employees
[GET]/http://localhost:8888/EMPLOYEES-SERVICE/employees/addresses/{addressID}
[DELETE]/http://localhost:8888/EMPLOYEES-SERVICE/employees/{employeeID}
La requête PUT pour modifier un employé
[PUT]/http://localhost:8888/EMPLOYEES-SERVICE/employees/{employeeID}
Exemple du body de la requête:
{
"employeeID": 2,
"firstname": "David",
"lastname": "TOUITOU",
"email": "david.touitou@natan.fr",
"createdDate": "2022-09-12 : 18:05:41",
"birthCountry": "Isreal",
"addressID": 2
}
Postman:
La requête POST pour créer une société
[POST]/http://localhost:8888/COMPANY-SERVICE/companies
Exemple du body de la requête:
{
"companyName":"NATAN",
"companyType":"CLIENT"
}
[GET]/http://localhost:8888/COMPANY-SERVICE/companies
[GET]/http://localhost:8888/COMPANY-SERVICE/companies/{companyID}
[DELETE]/http://localhost:8888/COMPANY-SERVICE/companies/{companyID}
[DELETE]/http://localhost:8888/COMPANY-SERVICE/companies
La requête PUT pour modifier une société
[PUT]/http://localhost:8888/COMPANY-SERVICE/companies/{companyID}
Exemple du body de la requête:
{
"companyID":1
"companyName":"NATAN-PARIS",
"companyType":"CLIENT"
}
Postman:
La requête POST pour créer un projet
[POST]/http://localhost:8888/PROJECT-SERVICE/projects/employees/{employeeID}/companies/{companyID}
Exemple du body de la requête:
{
"projectName":"Gestion employees",
"projectPriority":"P1",
"description":"La formation des employees au développement backend avec le framework Angular",
"projectProgress":"END"
}
Retour de la requête:
{
"projectID": 2,
"projectName": "TRAINING EMPLOYEES",
"projectPriority": "P1",
"createdDate": "2022-09-13 : 10:19:04",
"description": "La formation des employees au développement backend avec le framework Angular",
"projectProgress": "END",
"employeeID": 2,
"employee": {
"employeeID": 2,
"firstname": "David",
"lastname": "TOUITOU",
"email": "david.touitou@natan.fr",
"createdDate": "2022-09-12 : 18:05:41",
"addressID": 2
},
"companyID": 1,
"company": {
"companyID": 1,
"companyName": "NATAN-PARIS",
"companyType": "CLIENT",
"createdDate": "2022-09-12: 18:08:48"
}
}
[GET]/http://localhost:8888/PROJECT-SERVICE/projects
[GET]/http://localhost:8888/PROJECT-SERVICE/projects/{projectID}
[DELETE]/http://localhost:8888/PROJECT-SERVICE/projects/{projectID}
[GET]/http://localhost:8888/PROJECT-SERVICE/projects/employees/{employeeID}
[GET]/http://localhost:8888/PROJECT-SERVICE/projects/companies/{companyID}
La requête PUT pour modifier une un projet
[PUT]/http://localhost:8888/PROJECT-SERVICE/projects/{projectID}
Exemple du body de la requête:
{
"projectID": 1,
"projectName": "TRAINING EMPLOYEES",
"projectPriority": "P1",
"createdDate": "2022-09-12 : 18:11:20",
"description": "La formation des employees au développement backend avec le framework Angular",
"projectProgress": "END",
"employeeID": 1,
"companyID": 1
}
Deleting the wiki page 'Application avec des microservices avec Spring Cloud OpenFeign' cannot be undone. Continue?
Powered by TurnKey Linux.