Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/heliolj/asynchronous-task-management-system

Task Management System using Microsservices. Powered by Java Spring Boot, Docker, RabbitMQ, PostgreSQL, and NGINX. Efficiently handles tasks with asynchronous processing for optimal performance
https://github.com/heliolj/asynchronous-task-management-system

docker java message-queue microservices nginx postgresql rabbitmq spring-boot

Last synced: 5 days ago
JSON representation

Task Management System using Microsservices. Powered by Java Spring Boot, Docker, RabbitMQ, PostgreSQL, and NGINX. Efficiently handles tasks with asynchronous processing for optimal performance

Awesome Lists containing this project

README

        

# Task Management System

## Overview

Task Management System, a robust Java Spring Boot application designed to streamline task creation, assignment, and tracking. This README provides essential technical information about the project, explaining its architecture, design decisions, and how to get started.

# Microservices Architecture

The project embraces a Microservices Architecture, promoting modularity, scalability, and resilience. Each aspect of task management, from creation to assignment, is encapsulated within independent, loosely coupled microservices.

![mermaid diagram](https://i.imgur.com/uyI4wKt.png)

## Project Structure

The project follows a modular structure to enhance maintainability and scalability:

- **`src/main/java`**: Java source code.
- **`src/test/java`**: Unitary and integration tests for controller and services.
- **`src/main/resources`**: Configuration files.
- **`docker-compose.yml`**: Docker Compose configuration.

## Technologies Used

- **Java Spring Boot**: A powerful and flexible framework for building Java-based enterprise applications.
- **Docker**: Containerization for easy deployment and scalability.
- **RabbitMQ**: Asynchronous messaging for efficient task assignment.
- **PostgreSQL Database**: Utilizes a relational database for storing task information.
- **Asynchronous Processing with @Async from Spring Boot**: Implements parallelism for efficient task processing.
- **NGINX**: Efficiently handles load balancing and acts as a reverse proxy for the microservices.

## Getting Started

To run the Task Management System locally, follow these steps:

### Building and Docker

Dockerize the application for simplified deployment:

1. Build the jar file: `mvn clean install`
2. Build the Docker image: `docker build -t task-management-system .`

#### Running with full system with Docker

1. Run the docker containers: `docker compose up`
2. Access the application at [http://localhost:8080](http://localhost:8080)

#### Running application locally

1. Put PostgreSQL and RabbitMQ containers up: `docker compose up postgres rabbitmq`
2. Run the Spring Boot application: `./mvnw spring-boot:run`
3. Access the application at [http://localhost:8080](http://localhost:8080)

## Asynchronous Communication with RabbitMQ

RabbitMQ is integrated into the system to handle asynchronous communication. Task assignment events are processed efficiently, ensuring responsiveness.

## Parallelism

Task processing is optimized through parallel mechanisms. Utilizing Spring's `@Async` to parallelize task processing, enhancing system performance.

## Design and Architecture Patterns

The project adheres to SOLID principles, applying design patterns such as Factory, Repository, and Observer where necessary. DTOs facilitate clean separation of concerns for API communication.

## License

This project is licensed under the [MIT License](LICENSE.md). Feel free to use, modify, and distribute the code as per the terms of the license.

Happy coding! 🚀