Skip to content

vitorAzevedo09/food-ordering-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Food Ordering System

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 Overview

  • Project Name: Food Ordering System
  • Architecture and Technologies: Spring Boot microservices, Clean & Hexagonal architectures, DDD, SAGA, Outbox, CQRS, Kafka, Kubernetes, Google Kubernetes Engine (GKE)

Project Structure

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.

Features

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.

Prerequisites

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]

Getting Started

To get started with the Food Ordering System, follow these steps:

  1. Clone this repository to your local machine.

  2. Navigate to the root folder of each microservice and follow the setup and installation instructions provided in their respective README files.

  3. Deploy the microservices to your Kubernetes cluster or GKE.

  4. Explore the provided documentation and code to understand how each microservice works.

  5. Start making orders, processing payments, and exploring the capabilities of the system.

Contributing

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.

License

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!

About

microsservice study

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages