A real-time chat application built with Spring Boot microservices and React frontend.
- Overview
- Features
- Architecture
- Prerequisites
- Installation
- Configuration
- Running the Application
- API Documentation
- Frontend Structure
- Backend Services
- Testing
- Deployment
This chat application provides real-time messaging capabilities with automatic user assignment, room management, and message persistence using Kafka for event-driven communication.
- Real-time messaging via WebSockets
- Automatic user joining with generated usernames
- Automatic room assignment (max 10 users per room)
- Chat rooms with auto-generated names
- Message history persistence
- User presence indicators
- Responsive React frontend
- Event-driven microservices architecture with Kafka
βββ backend/
β βββ message-service/ # Message handling microservice (Spring Boot)
β βββ room-service/ # Room management service (Spring Boot)
β βββ user_service/ # User management service (Spring Boot)
β βββ websocket_gateway/ # WebSocket gateway (Spring Boot)
βββ frontend/ # React web client (Vite + TypeScript)
βββ docker-compose.yaml # Kafka infrastructure
- Java 21+
- Maven 3.8+
- Node.js 18+ (for frontend)
- Docker (for Kafka)
- Clone the repository:
git clone <repository-url>
cd chat
- Start Kafka infrastructure:
docker-compose up -d
- Build backend services:
# Build all services
cd backend/message-service && mvn clean install
cd ../room-service && mvn clean install
cd ../user_service && mvn clean install
cd ../websocket_gateway && mvn clean install
- Install frontend dependencies:
cd frontend
npm install
Each service runs with default ports:
- user_service: 8081
- room-service: 8082
- message-service: 8083
- websocket_gateway: 8080
Services use H2 in-memory databases for development.
Start Kafka using the provided docker-compose:
docker-compose up -d
This starts:
- Zookeeper on port 2181
- Kafka on port 9092
- Kafka UI on port 8090
- Start Kafka:
docker-compose up -d
- Start backend services (in separate terminals):
# User Service (port 8081)
cd backend/user_service
./mvnw spring-boot:run
# Room Service (port 8082)
cd backend/room-service
./mvnw spring-boot:run
# Message Service (port 8083)
cd backend/message-service
./mvnw spring-boot:run
# WebSocket Gateway (port 8080)
cd backend/websocket_gateway
./mvnw spring-boot:run
- Start frontend:
cd frontend
npm run dev
The frontend will be available at http://localhost:5173
# Build JAR files
cd backend/user_service && mvn clean package
cd ../room-service && mvn clean package
cd ../message-service && mvn clean package
cd ../websocket_gateway && mvn clean package
# Run services
java -jar backend/user_service/target/user_service-0.0.1-SNAPSHOT.jar
java -jar backend/room-service/target/room-service-0.0.1-SNAPSHOT.jar
java -jar backend/message-service/target/message-service-0.0.1-SNAPSHOT.jar
java -jar backend/websocket_gateway/target/websocket_gateway-0.0.1-SNAPSHOT.jar
# Build and serve frontend
cd frontend
npm run build
npm run preview
POST /api/users/join
- Join chat (auto-assigns to room)GET /api/users/{userId}
- Get user detailsDELETE /api/users/{userId}
- Disconnect user
GET /api/rooms
- Get all roomsGET /api/rooms/available
- Get available roomsGET /api/rooms/{roomId}
- Get specific roomGET /api/rooms/user/{userId}
- Get user's roomPOST /api/rooms/assign
- Manually assign user to roomDELETE /api/rooms/members/{userId}
- Remove user from room
POST /api/messages
- Send messageGET /api/messages/room/{roomId}
- Get room messages
- URL:
ws://localhost:8080/ws
- Topic:
/topic/room/{roomId}
- Subscribe to room messages
Events published to /topic/room/{roomId}
:
CHAT
- Chat messageJOIN
- User joined roomLEAVE
- User left roomSYSTEM
- System notifications
frontend/
βββ src/
β βββ components/ # React components
β β βββ Chat/ # Chat-related components
β β βββ Layout/ # Layout components
β βββ hooks/ # Custom React hooks
β βββ services/ # API service functions
β βββ context/ # React context providers
β βββ types/ # TypeScript type definitions
β βββ assets/ # Static assets
βββ public/ # Static public files
βββ package.json # Dependencies and scripts
ChatRoom
- Main chat interfaceMessageList
- Message display componentMessageInput
- Message input componentUserList
- Online users sidebarHeader
- Application header
Handles user lifecycle management.
Technologies: Spring Boot, Spring Data JPA, H2 Database, Kafka Features:
- Auto-generates unique usernames
- Publishes user events to Kafka
- H2 console:
http://localhost:8081/h2-console
Manages chat rooms and user assignments.
Technologies: Spring Boot, Spring Data JPA, H2 Database, Kafka Features:
- Creates rooms with auto-generated names
- Assigns users to rooms (max 10 per room)
- Manages room lifecycle
- H2 console:
http://localhost:8082/h2-console
Handles message persistence and retrieval.
Technologies: Spring Boot, Spring Data JPA, H2 Database, Kafka Features:
- Stores chat messages
- Provides message history
- Publishes message events
- H2 console:
http://localhost:8083/h2-console
Manages WebSocket connections and real-time messaging.
Technologies: Spring Boot, WebSocket, STOMP, Kafka Features:
- WebSocket connection management
- Real-time message broadcasting
- Kafka event consumption
- Connection tracking
# Run backend service tests
cd backend/user_service && mvn test
cd backend/room-service && mvn test
cd backend/message-service && mvn test
cd backend/websocket_gateway && mvn test
# Run all backend tests
find backend -name "pom.xml" -execdir mvn test \;
# Run frontend tests
cd frontend
npm test
# Start only Kafka infrastructure
docker-compose up -d
# Build all services
find backend -name "pom.xml" -execdir mvn clean package \;
# Start Kafka
docker-compose up -d
# Run services
java -jar backend/user_service/target/user_service-0.0.1-SNAPSHOT.jar &
java -jar backend/room-service/target/room-service-0.0.1-SNAPSHOT.jar &
java -jar backend/message-service/target/message-service-0.0.1-SNAPSHOT.jar &
java -jar backend/websocket_gateway/target/websocket_gateway-0.0.1-SNAPSHOT.jar &
# Build and serve frontend
cd frontend && npm run build && npm run preview
- Frontend: 5173 (dev) / 4173 (preview)
- WebSocket Gateway: 8080
- User Service: 8081
- Room Service: 8082
- Message Service: 8083
- Kafka: 9092
- Kafka UI: 8090