Architecture Micro-services avec Spring Cloud

Travail à faire :

  1. Créer le micro service Customer-service
    • Créer entité Customer
    • Créer l'interface CustomerRepository basée sur Spring Data
    • Déployer l'API Restful du micro-service en utilisant Spring Data Rest
    • Tester le Micro service
  2. Créer le micro service Inventory-service
    • Créer l'entité Product
    • Créer l'interface ProductRepository basée sur Spring Data
    • Déployer (API Restful du micro-service en utilisant Spring Data Rest
    • Tester le Micro service
  3. Créer la Gateway service en utilisant Spring Cloud Gateway
    • Tester le Service proxy en utilisant une configuration Statique basée sur le fichier application.yml
    • Tester le Service proxy en utilisant une configuration Statique basée une configuration Java
  4. Créer l'annuaire Registry Service basé sur NetFlix Eureka Server
  5. Tester le proxy en utilisant une configuration dynamique de Gestion des routes vers les micro services enregistrés dans l'annuaire Eureka Server
  6. Créer Le service Billing-Service en utilisant Open Feign pour communiquer avec les services Customer-service et Inventory-service 7. Créer un client Angular qui permet d'afficher une facture
  7. Créer un client Angular qui permet d'afficher une facture

Architecture micro-services

image

Pour customer-service

image

Actuator

image

H2 console

image

Pour Inventory-service

image

H2-console

image

Pour le service GateWay

Créer un fichier application.yml dans ressources

image

image

Et dans application.properties

image

On essaie de communiquer directement avec la gateway et voir si on peut atteindre les micro-services ;

  • Customers

image

  • Products

image

Donc, à travers la gateway on a pu communiquer avec 2 micro-services

Maintenant, on va désactiver la configuration par fichier application.yml par changer son nom et on va essayer la configuration JAVA.

image

Et tout ça va marcher comme pour application.yml Ces deux méthodes sont des méthodes statiques qu’on utilise quand l’adresse est fixe et on connait.

Pour faire dynamiquement, on va créer un nouveau projet eureka-discovery, avec juste la dépendance Eureka Server, et on met l’annotation.

image

image

Dans Inventory-service et Customer-service et Gateway-service on change false à true

image

Dans Gateway-service

image

lb c’est pour Load Balancer Et maintenant, tout ça fonctionne bien, et juste avec le nom du micro-service

image

image

La méthode précédente, ce n’est pas évidente quand on a beaucoup de micro-service, pour cela on va essayer d’exploiter une méthode plus dynamique.

image

Maintenant, on peut atteindre notre micro-service par l’url mais on doit ajouter le nom du micro-service avant le Path

image

S’il y a plusieurs instances de même micro-service le Gateway utilise le principe de l’équilibrage de charge ; le spring cloud gateway utilise un service spring cloud qui s’appelle Ribon, qui est un service d’équilibrage de charge, on n’a pas l’exploiter explicitement mais il est utilisé implicitement, mais on peut le configurer nous-même.

Pour Billing-service

image

On voit que l’ID est null, pour l’exposer on doit ajouter dans Customer-service avec RestConfiguration

image

Le même pour inventory

Lier les produits à une facture

image

Problème de Boucle infinie

image

Pour régler le problème

image

Le problème est résolu

image

Mais sans le nom du produit et les informations sur le client sauf son ID, pour cela on va essayer de les récupérer.

Dans BillingRestController

image

Et on va avoir le résultat suivant :

image

Mais on aucun besoin d’ajouter les autres informations du produit puisqu’elles sont déjà présentes Donc on va ajouter seulement un attribut productName au productItem avec l’annotations @Transient puisqu’on ne veut pas créer cet attribut sur la table

image

Et on modifie BillingRestController pour qu’il soit :

image

Le résultat :

image

Partie 3 : client Angular

Produits

image

Clients

image

Ordres de client

image

Facture

image

Realtime ordering - bills analysis

analytics


Keycloak

image

refresh token

image