-
On souhaite créer un système distribué basé sur les micro-services en utilisant une architecture pilotée par les événements respectant les deux patterns Event Sourcing et CQRS. Cette application devrait permettre de gérer les infractions concernant des véhicules suites à des dépassement de vitesses détectés par des radars automatiques. Le système se compose de trois micro-services :
- Le micro-service qui permet de gérer les radars
- Le micro-service d’immatriculation qui permet de gérer des véhicules appartenant des propriétaires
- Le micro-service qui permet de gérer les infractions.
- Etablir une architecture technique du projet Architecture CQRS :
Le service « radar-commands-service » :
Les détails du micro service dans AXON :
Le service « radar-query-service » :
Les détails du micro service dans AXON :
Lancement de Axon dans Docker compose :
Axon dashboard :
- Développer le micro-service Immatriculation
Le service « Immatriculation-commands-service » :
Les détails du micro service dans AXON :
Le service « Immatriculation-query-service » :
Les détails du micro service dans AXON :
- Développer le micro-service Infractions
Le service « Infractions-commands-service » :
Les détails du micro service dans AXON :
Le service « Infractions -query-service » :
Les détails du micro service dans AXON :
- Mettre en place les services techniques de l’architecture micro-service (Gateway, Eureka Discovery service) Le service « Eureka-discovery-service » :
Le service « Gateway-service » :
- Développer votre application Frontend avec Angular ou React
Les composants :
La listes des radars :
Les événements passés sur un radar :
- Sécuriser votre système avec un système de d’authentification OAuth2 comme Keycloak
Création d’un realm :
Création d’un client :
Création des utilisateurs :
Création des roles :
Assignation des roles aux utilisateurs :
![](https://i.imgur.com/h6F2aDl.png)
Ajouter les dépendances suivantes dans les 6 micro services:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>20.0.1</version>
</dependency>
Après, la partie de sécurité dans chaque micro-service :
La partie front « Authentification pour accéder » :
- Ecrire un script docker-compose.yml pour le déploiement de ce système distribué dans des conteneurs docker. Le script docker-compose :
version: '3'
services:
eureka-service:
build: ./discovery-service/
hostname: discovery-service
ports:
- "8761:8761"
networks:
- default-network
immatriculation-commands-service:
build: ./immatriculation-commands-service/
hostname: immatriculation-commands-service
ports:
- "8081:8081"
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
immatriculation-query-service:
build: ./immatriculation-query-service/
hostname: immatriculation-query-service
ports:
- "8082:8082"
restart: on-failure
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
infraction-command-service:
build: ./infraction-command-service/
hostname: infraction-command-service
ports:
- "8090:8090"
restart: on-failure
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
infraction-query-service:
build: ./infraction-query-service/
hostname: infraction-query-service
ports:
- "8091:8091"
restart: on-failure
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
radar-command-service:
build: ./radar-command-service/
hostname: radar-command-service
ports:
- "8181:8181"
restart: on-failure
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
radar-query-service:
build: ./radar-query-service/
hostname: radar-query-service
ports:
- "8883:8883"
restart: on-failure
depends_on:
- eureka-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761
networks:
- default-network
gateway-service:
build: ./gateway-service/
hostname: gateway-service
ports:
- "9999:9999"
depends_on:
- eureka-service
- immatriculation-query-service
- immatriculation-command-service
- infraction-command-service
- infraction-query-service
- radar-command-service
- radar-query-service
environment:
- eureka.client.service-url.defaultZone=http://discovery-service:8761/eureka
networks:
- default-network
networks:
default-network:
driver: bridge
la documentation swagger du « radar-command-service » :
la documentation swagger du « infraction-command-service » :
La documentation swagger du « infraction-query-service » :
la documentation swagger du « immatriculation-command-service » :
La documentation swagger du « immatriculation-query-service » :
La liste des dépassements de vitesse :
La liste des dépassements de vitesse :
La liste des radars :
La liste des événements dans AXON:
Les détails d’un événement :
Les commandes
La listes des queries des micro-services :