This is my personal project, to apply my learnings about microservices that I have seen and worked with in my current/previous software engineering job.
The project is a pizza ordering system that allows users to order pizzas online. It consists of multiple microservices, each responsible for a specific part of the system.
The documentation is inside docs
The project is:
- Built using .NET 9
- Uses event driven architecture for communication between microservices
- Fully instrumented using OpenTelemetry
freecompress-2025-04-16.11-05-14.mp4
Exception flow, showing error in ordering, and how OpenTelemetry instrumentation makes it easy to figure out what's wrong!
SimplePizzaWinkel-otel.mp4
- .NET9 if you want to build locally (see below)
- Docker
- Make, by default installed on Linux distros
- For Windows users, can use Make
- For MacOS, simply use
brew install make
- Go to the root of the project, ensure you have Docker running and Make installed
- Build container images using
make build - Run the project using
make run-local - Access the application
- Register a new user to begin using the system
- Login: http://localhost:3000/login (Default admin credentials: admin@simplepizzawinkel.com / AdminAcc#99)
I also have published the images to Docker Hub, so you can run the project without building the images yourself.
Run the project using make run-prd, and go to http://localhost:3000/login to access the application.
The default admin credentials are the same as above.
All the individual microservices can run independently, and all follow the same structure inside their respective folder under src:
- Start up required infrastructure:
docker-compose up -d - Start up the API component and Dapr sidecar, you'll need two separate terminal windows:
make local-apimake dapr-api-sidecar
- If the specific microservice has a worker component for handling events, start them as well, you'll need two more terminal windows:
make local-workermake dapr-worker-sidecar
- You can switch out either
make local-apiormake local-workerwith starting the application inside your IDE in debug mode
This will run the individual microservice locally.