This is a Twitter-like microservice application that utilizes the Spring framework for the backend and React for the frontend. The application is built using microservice architecture that separates each functionality into individual microservices.
- Spring Framework - used for building the backend microservices.
- Eureka - used for service discovery and load balancing
- Spring Cloud Gateway used for provide APIs routing
- Rabbit MQ - used as a message broker between the microservices.
- Docker - used to containerize each microservice and to simplify deployment.
- Hibernate - for SQL database mapping
- Spring Websockts - for messaging and notification with stomp and sockjs
- Spring Security - for authentication and authorization management with JWT
- React Framework & Typescript - used for building the user interface
- Tailwind - for styles
- Redux & Redux Tollkit - for state management
The application consists of the following microservices:
- Eureka Server - handles service registration and discovery
- Auth Service - handles user authentication, authorization and routing
- Tweet Service - manages the creation, deletion, and retrieval of tweets.
- Profile Service - manages the creation, deletion, and retrieval of user profiles.
- Search Service - handles searching for tweets and users.
- Media Service - handles media upload and reterive
- JWT Service - handles JWT generation and validation
- Messages Service - handles messages between users
- Notification Service - handles user notifictions
- Poll Service - handles poll tweets
Each microservice is developed independently and deployed in its own container.
Before running the application, you need to have the following installed:
- Docker
- Node.js
- Java Development Kit (JDK) 11+
- maven
Then follow these steps to run the application:
- Clone the repository to your local machine. git clone git@github.com:mohamedhalim1998/Twitter-Clone.git
- Run the docker-compose file to start all microservices. docker compose up
- run frontend npm start
- Navigate to http://localhost:3000 in a web browser to view the application.