Microservices Ordering System

I challenged myself to build from scratch a system that simulates the ordering process for construction products, based on a layered architecture with partial Domain-Driven Design (DDD) and Event-Driven Architecture principles.

System Overview:
🧱 Products Service – Responsible for product catalog and inventory management
🛒 Orders Service – Responsible for creating, approving, and managing orders
💻 Client Simulator – Interface demonstrating various system operations

Each service runs independently, with its own API, and they communicate in a distributed manner via RabbitMQ, all running together in a single environment using Docker Compose 🐳

🖥️ Client Communication:
The Client Simulator interacts with the microservices via HTTP/REST for synchronous operations requiring immediate responses, such as creating an order or requesting product details, while communication between services is asynchronous using RabbitMQ.

⚙️ Key Principles:

🧩 Partial DDD – I implemented the IDomainEventPublisher interface to propagate internal events from the Business Logic layer to the API layer, keeping the system isolated and modular. This is a partial implementation of DDD.

📨 Partial Event-Driven – RabbitMQ is used for asynchronous communication between microservices, e.g., for order approval and inventory deduction. Again, this is a partial implementation aimed at learning and understanding the principles.

🐳 Containerization & Infrastructure – All microservices, the database, and RabbitMQ run together using Docker Compose, via a docker-compose.yml file that simulates a full local production environment.

🧰 Tech Stack: .NET Core | MVC | Docker | REST APIs | SignalR | EF Core | MS SQL | Structured Logging | AutoMapper | Background Worker | RabbitMQ | Optimistic Concurrency (rowversion) | Partial Event-Driven Architecture | Partial DDD

💬 This was a challenging and highly enjoyable project – it helped me gain a deep understanding of how to build a distributed system that is flexible, modular, and extensible, even if the DDD and Event-Driven aspects are only partially implemented.

Github link


Back to List