Welcome to the Food Ordering System project! This project is a comprehensive example of building a modern microservices-based system for managing food orders. It leverages Spring Boot, clean and hexagonal architectures, Domain-Driven Design (DDD) principles, SAGA pattern for data consistency, Outbox pattern for event-driven communication, Command Query Responsibility Segregation (CQRS), Apache Kafka for messaging, and Kubernetes (Google Kubernetes Engine) for orchestration.
- Project Name: Food Ordering System
- Architecture and Technologies: Spring Boot microservices, Clean & Hexagonal architectures, DDD, SAGA, Outbox, CQRS, Kafka, Kubernetes, Google Kubernetes Engine (GKE)
The Food Ordering System project is structured as a set of microservices, each serving a specific function within the application. Here is an overview of the project's structure:
- Order Service: Handles order creation, order status, and communication with other services.
- Payment Service: Manages payment processing and interactions with payment gateways.
- Menu Service: Provides menu items and pricing information.
- User Service: Manages user authentication and profiles.
- Notification Service: Sends notifications to users.
- Shipping Service: Manages order delivery and logistics.
The Food Ordering System project showcases various features and best practices:
-
Clean & Hexagonal Architectures: Each microservice is designed using clean and hexagonal architecture, promoting modularity and maintainability.
-
Domain-Driven Design (DDD): We implement DDD principles, defining clear domain models for orders, payments, menus, users, notifications, and shipping.
-
SAGA Pattern: To ensure data consistency across microservices, we implement the SAGA pattern for managing distributed transactions.
-
Outbox Pattern: We use the Outbox pattern for efficient event-driven communication, ensuring that events are reliably delivered.
-
Command Query Responsibility Segregation (CQRS): The application segregates commands and queries for optimal performance and scalability.
-
Apache Kafka: Kafka is employed for event-driven communication and message streaming between microservices.
-
Kubernetes & GKE: The project is orchestrated and deployed using Kubernetes and Google Kubernetes Engine (GKE) for scalability and container management.
Before running the Food Ordering System, ensure that you have the following prerequisites:
- Java Development Kit (JDK) 17 or higher
- Apache Maven
- Docker (for running containers)
- A Kubernetes cluster or Google Kubernetes Engine (GKE) for deployment
- Apache Kafka (for messaging)
- [Other specific dependencies]
To get started with the Food Ordering System, follow these steps:
-
Clone this repository to your local machine.
-
Navigate to the root folder of each microservice and follow the setup and installation instructions provided in their respective README files.
-
Deploy the microservices to your Kubernetes cluster or GKE.
-
Explore the provided documentation and code to understand how each microservice works.
-
Start making orders, processing payments, and exploring the capabilities of the system.
We welcome contributions to the Food Ordering System project. If you have suggestions for improvements, bug fixes, or additional features, please feel free to create an issue or submit a pull request.
The Food Ordering System project is available under the [License Name]. You can find more details in the LICENSE file.
Happy coding and enjoy exploring the world of Spring Boot microservices and modern software architectures!