Bien que ce système utilise des concepts d'architecture logicielle de niveau entreprise (systèmes distribués, découplage de services, persistance de données), il s'agit d'un projet à des fins éducatives.
L'objectif principal est de démontrer la maîtrise :
- Du protocole AMQP avec RabbitMQ.
- De la sérialisation/désérialisation d'objets complexes en C#.
- De la gestion des flux de données asynchrones (Pub/Sub).
- De la manipulation du système de fichiers (I/O) en environnement multi-services.
Ce projet implémente un système de messagerie asynchrone basé sur le patron Publish/Subscribe en C#. Il simule la création de commandes aléatoires et leur traitement par différents services via RabbitMQ (v6.8.1).
Le système utilise le modèle d'échange Topic de RabbitMQ pour router les messages en fonction de la priorité du client (Premium ou Normal).
- Producteur : Génère des objets
Commandeavec des données aléatoires. - Routing Key : *
Commande.Placee.NormalCommande.Placee.Premium
Guid Reference: Identifiant unique de la commande.string NomClient: Nom du client généré aléatoirement.List<Article> Articles: Liste de produits.bool EstPremium: Indicateur du statut client.
Guid Reference: Identifiant unique du produit.string NomProduit: Désignation de l'article.decimal Prix: Prix unitaire.int Quantite: Nombre d'articles.
Le projet comporte 4 consommateurs distincts qui réagissent aux messages circulant sur le bus :
| Service | Filtre (Binding) | Action |
|---|---|---|
| Journalisation | # (Tous) |
Crée un dossier Journalisation et écrit le détail brut de chaque message dans un fichier. |
| Facturation | Commande.Placee.* |
Crée un dossier Facturation et génère un fichier de facture pour chaque commande. |
| Expédition | Commande.Placee.* |
Affiche dans la console la liste des articles à préparer. |
| Courriel | Commande.Placee.* |
Affiche une notification console personnalisée selon le statut (Premium/Normal). |
- .NET SDK (Version 6.0 ou +)
- RabbitMQ Server installé et fonctionnel (Version 6.8.1).
dotnet add package RabbitMQ.Client --version 6.8.1
dotnet add package Newtonsoft.Json