Dự án này là một hệ thống Chat thời gian thực sử dụng Spring Boot, WebSocket (STOMP), Kafka, kết hợp với Spring Cloud Config Server và Discovery Server (Eureka). Hệ thống được xây dựng theo mô hình Microservices, hỗ trợ scaling theo chiều ngang, dễ dàng mở rộng và cấu hình tập trung.
- Gửi & nhận tin nhắn thời gian thực giữa nhiều người dùng.
- Mở rộng hệ thống dễ dàng theo chiều ngang.
- Cấu hình tập trung cho toàn bộ hệ thống.
- Dễ dàng phát hiện và định tuyến các service nhờ Eureka.
- Lưu trữ và truy xuất lịch sử tin nhắn.
Client
|
v
[Spring Cloud Gateway]
|
v
[Auth Service] ---> [User Service]
|
v
[Chat WebSocket Service] <--> Kafka <--> [Chat Service]
|
v
[Redis Pub/Sub]
|
v
[Other WebSocket Instances]
(Config Server & Discovery Server ở tầng control plane)
| Thành phần | Công nghệ |
|---|---|
| API Gateway | Spring Cloud Gateway |
| Config Server | Spring Cloud Config |
| Service Discovery | Eureka Server |
| Authentication | Spring Security + JWT |
| WebSocket Chat | Spring WebSocket + STOMP |
| Messaging Queue | Apache Kafka |
| Data Persistence | MongoDB |
| Cache & Session | Redis |
| Deploy & Container | Docker + Docker Compose |
chat-ws/ # WebSocket service
auth-service/ # Auth (JWT)
chat-service/ # Lưu lịch sử tin nhắn
user-service/ # Quản lý user
gateway/ # API Gateway
config-server/ # Spring Cloud Config
discovery-server/ # Eureka Server
README.md
cd kafka-cluster
docker-compose up -ddocker-compose -f docker-compose-app.yml up -dCó thể dùng thêm Kafka UI để quan sát trạng thái topic, broker, message.
- Endpoint WebSocket:
ws://localhost:8080/ws - Gửi tin nhắn:
/app/chat.send - Subscribe:
/topic/chat/{roomId}
{
"sender_id": "123",
"received_id": "456",
"content": "Hello world",
"timestamp": "2025-07-06T12:00:00"
}docker exec kafka1 kafka-topics --bootstrap-server kafka1:19092 --create --topic chat-topic --replication-factor 3 --partitions 3- Gửi/nhận tin nhắn real-time
- Đăng nhập & xác thực người dùng bằng JWT
- Lưu trữ lịch sử chat vào database
- Broadcast message qua Kafka
- Hỗ trợ scale WebSocket ngang qua nhiều instance
- Cấu hình tập trung qua Spring Cloud Config
- Service discovery tự động qua Eureka
- Tích hợp gửi thông báo (FCM) - đang phát triển
- Hệ thống tìm kiếm (Elasticsearch) - đang phát triển
Sử dụng JWT, token được gắn vào quá trình bắt tay WebSocket:
ws://localhost:8080/ws?token=YOUR_JWT_TOKEN
spring.kafka.bootstrap-servers=localhost:9092,localhost:9093,localhost:9094
spring.kafka.consumer.group-id=chat-group
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.cloud.config.uri=http://localhost:8888
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/- Java 17+
- Gradle hoặc Maven
- Docker & Docker Compose
- Redis, Kafka, Zookeeper
- MongoDB hoặc PostgreSQL
- Spring Cloud (Config, Eureka)
MIT License — tự do sử dụng cho học tập, phát triển, nghiên cứu.
Nguyễn Đình Lam
📧 Email: ndlam.dev@gmail.com
📍 Bình Dương, Việt Nam
GitHub: github.com/nguyendinhlam
Đây là dự án demo kiến trúc microservices chat realtime có khả năng scale & cấu hình tập trung.