Loading repository data…
Loading repository data…
LucklySpace / repository
This project is a distributed Instant Messaging (IM) backend service based on Spring Boot and Spring Cloud, utilizing Netty for high-performance network communication. It supports user login, message sending, and group chat, ensuring high availability and maintainability through a microservices architecture.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
简体中文 | English
Lucky-Cloud 是一个基于 Spring Cloud Alibaba + Spring Boot 3 构建的高性能、高可用的即时通讯服务端系统。本系统采用微服务架构设计,支持大规模用户并发连接,提供完整的即时通讯解决方案,包括消息推送、音视频通话、文件传输等核心功能。
功能: 系统入口,负责请求路由、负载均衡、限流熔断
功能: 用户身份验证和权限管理
功能: WebSocket长连接管理和消息推送
功能: 核心业务逻辑处理
im-ai(端口: 8088): AI 服务(对话、嵌入、Prompt 管理、工具调用)im-oss(端口: 8087): MinIO 文件服务,支持分片上传、断点续传、图像压缩/缩略图/水印、nsfw图片审查im-platform(端口: 8090): 应用更新与短链服务(应用更新与短链),支持版本检查与预签名下载、Bloom去重 + Caffeine LRU +
Redis短链缓存im-leaf(端口: 8086): 分布式ID服务(Segment、Snowflake、UID、UUID),支持Nacos工作ID分配im-database(端口: 8100): 数据库初始化与元数据服务im-meet(端口: 19100 WebSocket): 实时会话服务(Netty WS)im-analysis(端口: 8089): 文本分析服务(HanLP 分词、关键词、依存句法)im-proxy: 代理配置管理(Nginx 模板),辅助WebSocket代理与负载im-framework: 基础框架聚合(core/domain/common/crypto/spring/grpc/security/mq 等)用户发送消息流程:
1. 客户端 → im-gateway → im-chat
2. im-chat 处理业务逻辑
3. im-chat → RabbitMQ → im-connect
4. im-connect → 用户长连接 → 客户端
长连接管理流程:
1. 客户端通过im-gateway建立WebSocket连接
2. im-connect 注册用户信息和机器码到Redis
3. 定期心跳维持连接状态
4. 连接断开时清理Redis中的相关信息
客户端 → im-gateway → im-chat → RabbitMQ → im-connect → 客户端
messageId — 全局唯一,建议 Snowflake 或 UUID;messageTempId 仅客户端使用)。outbox 表插入一条记录(outbox 保存 messageId/payload/targetBroker/状态)。mandatory 标志,确保 broker 接收(且消息标记为持久化)。SENT_TO_BROKER。PENDING,后台任务会重试(见下)。outbox 状态为 PENDING/FAILED 的记录,重试 publish,或人工介入。persistent=trueack;或ack,处理失败 nack/reject(可重入或进 DLX)DELIVERY_ACK(messageId) 给 im-connectDELIVEREDUNDELIVERED 并进入重试策略/告警注意: 建议使用Linux环境部署,以获得最佳性能表现
# 启动 Redis
docker run --name redis -p 6379:6379 -v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis --appendonly yes
# 启动 Nacos
docker run -itd --name nacos --env PREFER_HOST_MODE=hostname --env MODE=standalone --env NACOS_AUTH_IDENTITY_KEY=${NACOS_AUTH_IDENTITY_KEY} --env NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE} --env NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN} -p 8848:8848 -p 9848:9848 -p 9849:9849 nacos/nacos-server:v2.2.1
# 启动 RabbitMQ
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5671-5672:5671-5672 rabbitmq
docker exec -it rabbit /bin/bash
rabbitmq-plugins enable rabbitmq_management
# 启动 MinIO
docker run -p 9000:9000 -p 9090:9090 --name minio -d --restart=always -e "MINIO_ROOT_USER=${MINIO_ROOT_USER}" -e "MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}" -v /root/minio/data:/data -v /root/minio/config:/root/.minio minio/minio server /data --console-address ":9090" --address ":9000"
# 启动 SRS (注意: CANDIDATE必须设置为物理机IP)
docker run -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 1990:1990 -p 8088:8088 --env CANDIDATE=192.168.1.9 -p 8000:8000/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs:6.0-d2
# 启动 PostgreSQL
docker run -d --name postgres -p 35432:5432 -e POSTGRES_USER=${POSTGRES_USER} -e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} -e POSTGRES_DB=${POSTGRES_DB} -v D:/Docker-vm/postgresql/vectordata:/var/lib/postgresql/data ankane/pgvector
# application.yml 示例配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml
redis:
host: localhost
port: 6379
rabbitmq:
host: localhost
port: 5672
username: ${RABBITMQ_USER}
password: ${RABBITMQ_PASSWORD}
# 文件存储配置
minio:
endpoint: localhost:9000
accessKey: ${MINIO_ACCESS_KEY}
secretKey: ${MINIO_SECRET_KEY}
bucket: im-files
# SRS配置
srs:
webrtc: http://localhost:8080
rtmp: rtmp://localhost:1935
推荐使用两种方式启动服务:
方式一:手动依次启动
1. im-database (端口:8086)
2. im-auth (端口: 8084)
3. im-chat (端口: 8085)
4. im-connect (端口: 19000-19002)
5. im-gateway (端口: 9191)
6. im-oss (端口: 8087)
7. im-platform (端口: 8090)
8. im-ai (端口: 8088)
9. im-analysis (端口: 8089)
方式二:使用构建脚本一键启动
# Windows 系统
deploy-all.bat
# Linux/macOS 系统
./deploy-all.sh
├── im-gateway/ # 网关服务
├── im-auth/ # 认证服务
├── im-connect/ # 长连接连接服务
├── im-chat/ # 业务服务
├── im-leaf/ # ID生成服务
├── im-oss/ # 文件管理服务
├── im-platform/ # 平台服务
├── im-ai/ # AI 服务
├── im-analysis/ # 文本分析服务
├── im-database/ # 数据库服务
├── im-meet/ # 实时会话服务
├── im-logging/ # 日志服务
├── im-lbs/ # 地理位置服务
├── im-quartz/ # 定时任务服务
├── im-framework/ # 公共模块
│ ├── im-core/ # 核心工具
│ ├── im-domain/ # 领域模型
│ ├── im-general/ # 通用组件
│ ├── im-grpc/ # gRPC相关
│ ├── im-security/ # 安全模块
│ ├── im-spring/ # Spring扩展
│ └── im-common/ # 工具类库
└── docs/ # 项目文档
启动服务后,访问以下地址查看API文档:
# 运行单元测试
mvn test
# 运行集成测试
mvn verify
# 生成测试报告
mvn jacoco:report
# 构建镜像
mvn clean package -DskipTests
# 使用Docker Compose一键部署所有服务
docker-compose up -d
测试环境: 8核16G云服务器,JDK 21,Docker部署
im-oss: 增加图像处理(压缩、缩略图、水印),支持分片/断点续传与MD5校验,支持nfsw图片审查im-platform: 增加应用更新与短链接服务(Bloom 去重、Caffeine LRU、Redis 缓存、访问计数分层归并)im-leaf: 集成多策略ID生成与Nacos工作ID分配im-ai: 接入 Spring AI(对话/嵌入/工具),完善Prompt与Session管理im-analysis: 提供分词/关键词/依存句法等文本分析能力im-proxy: Nginx代理模板生成与维护im-meet: 基于Netty的实时会话服务(WebSocket)im-gateway 目录)im-connect 目录)im-chat 目录)im-oss 中 PearlMinioClient.java)Spring Boot - Java应用框架
Spring Cloud Alibaba - 微服务方案
Nacos - 服务注册发现
Redis - 内存数据库
RabbitMQ - 消息队列
MinIO - 对象存储
SRS - 流媒体服务器
我们欢迎所有形式的贡献!请查看 CONTRIBUTING.md 了解详情。
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目仅供学习和参考使用,不得用于任何商业用途。作者不对使用本项目可能引起的任何直接或间接损失承担责任。
本项目目前处于积极维护状态,持续更新和完善功能。
⭐ 如果这个项目对您有帮助,请给我们一个星标!