# 离线消息功能 - 快速开始指南 ## 🚀 5分钟快速测试 ### 前提条件 确保以下服务已启动: - ✅ Redis (端口6379) - ✅ 后端服务 (端口8081) ### 步骤1: 启动服务 ```bash # 进入项目目录 cd Zhibo/zhibo-h # 启动后端服务 cd crmeb-front mvn spring-boot:run ``` 等待看到以下日志: ``` Started CrmebFrontApplication in XX seconds ``` ### 步骤2: 打开测试页面 在浏览器中打开: ``` Zhibo/测试离线消息功能.html ``` ### 步骤3: 配置测试参数 在测试页面中: 1. **API基础地址**: `http://localhost:8081` (默认) 2. **用户ID**: `1` (可以修改为任意数字) ### 步骤4: 测试保存消息 点击 **"保存10条测试消息"** 按钮 **预期结果**: ```json { "success": true, "message": "成功保存 10 条测试消息" } ``` ### 步骤5: 查看消息 点击 **"获取消息列表"** 按钮 **预期结果**: - 显示统计卡片:消息数量 = 10 - 显示消息列表,包含10条测试消息 - 每条消息显示内容和时间戳 ### 步骤6: 删除消息 1. 在 **"删除数量"** 输入框中输入 `5` 2. 点击 **"删除指定数量"** 按钮 **预期结果**: ```json { "code": 200, "message": "删除离线消息成功" } ``` ### 步骤7: 验证删除 再次点击 **"获取消息数量"** 按钮 **预期结果**: - 消息数量 = 5 (原来10条,删除了5条) ### 步骤8: 清空消息 点击 **"清空所有消息"** 按钮,确认操作 **预期结果**: ```json { "code": 200, "message": "清除离线消息成功" } ``` ### 步骤9: 验证清空 再次点击 **"获取消息数量"** 按钮 **预期结果**: - 消息数量 = 0 --- ## 🧪 使用命令行测试 ### 测试1: 保存消息 ```bash curl -X POST "http://localhost:8081/api/front/offline-messages/save?userId=1" \ -H "Content-Type: application/json" \ -d '{"type":"chat","content":"Hello World","timestamp":1234567890}' ``` ### 测试2: 获取数量 ```bash curl http://localhost:8081/api/front/offline-messages/count/1 ``` ### 测试3: 获取列表 ```bash curl "http://localhost:8081/api/front/offline-messages/list/1?limit=50" ``` ### 测试4: 删除消息 ```bash curl -X DELETE "http://localhost:8081/api/front/offline-messages/remove/1?count=5" ``` ### 测试5: 清空消息 ```bash curl -X DELETE http://localhost:8081/api/front/offline-messages/clear/1 ``` --- ## 🔍 使用Redis CLI验证 ### 查看离线消息 ```bash # 查看用户1的所有离线消息 redis-cli LRANGE offline:msg:1 0 -1 # 查看消息数量 redis-cli LLEN offline:msg:1 # 查看过期时间(秒) redis-cli TTL offline:msg:1 ``` ### 手动操作 ```bash # 手动添加消息 redis-cli LPUSH offline:msg:1 '{"type":"chat","content":"测试"}' # 手动删除消息 redis-cli DEL offline:msg:1 # 查看所有离线消息Key redis-cli KEYS "offline:msg:*" ``` --- ## 🎯 完整测试流程 ### 场景: 用户离线时收到消息 #### 1. 用户A和用户B都在线 ```bash # 打开两个浏览器窗口 # 窗口1: 用户A (userId=1) 连接WebSocket # 窗口2: 用户B (userId=2) 连接WebSocket ``` #### 2. 用户B断开连接(模拟离线) ```bash # 关闭窗口2的WebSocket连接 ``` #### 3. 用户A发送消息给用户B ```bash # 在窗口1中发送消息 # 消息会被保存到Redis: offline:msg:2 ``` #### 4. 验证离线消息已保存 ```bash # 查看用户B的离线消息数量 curl http://localhost:8081/api/front/offline-messages/count/2 # 或使用Redis CLI redis-cli LLEN offline:msg:2 ``` #### 5. 用户B重新上线 ```bash # 重新打开窗口2,用户B连接WebSocket # 系统会自动推送离线消息 ``` #### 6. 验证离线消息已推送并清除 ```bash # 再次查看用户B的离线消息数量 curl http://localhost:8081/api/front/offline-messages/count/2 # 应该返回 0,因为消息已推送并清除 ``` --- ## 📊 监控和调试 ### 查看日志 ```bash # 查看离线消息相关日志 grep "OfflineMessage" logs/application.log # 查看保存消息日志 grep "保存离线消息" logs/application.log # 查看推送消息日志 grep "推送离线消息" logs/application.log # 查看清除消息日志 grep "清除离线消息" logs/application.log ``` ### 监控Redis ```bash # 实时监控Redis命令 redis-cli MONITOR # 查看Redis内存使用 redis-cli INFO memory # 查看Key数量 redis-cli DBSIZE # 查看离线消息Key的数量 redis-cli KEYS "offline:msg:*" | wc -l ``` ### 性能测试 ```bash # 批量保存1000条消息 for i in {1..1000}; do curl -X POST "http://localhost:8081/api/front/offline-messages/save?userId=1" \ -H "Content-Type: application/json" \ -d "{\"type\":\"chat\",\"content\":\"Message $i\",\"timestamp\":$(date +%s)}" \ > /dev/null 2>&1 done # 查看消息数量(应该只有100条,因为有数量限制) curl http://localhost:8081/api/front/offline-messages/count/1 ``` --- ## ❓ 常见问题 ### Q1: 消息没有保存? **检查步骤**: 1. Redis是否运行: `redis-cli ping` 2. 后端服务是否启动: `curl http://localhost:8081/api/front/online/stats` 3. 查看错误日志: `grep "ERROR" logs/application.log` ### Q2: 消息没有推送? **检查步骤**: 1. 用户是否真的离线: `curl http://localhost:8081/api/front/online/status/用户ID` 2. WebSocket是否连接成功 3. 查看推送日志: `grep "推送离线消息" logs/application.log` ### Q3: 消息数量不对? **原因**: - 离线消息最多保存100条 - 超过100条会自动删除最旧的消息 - 消息会在7天后自动过期 **解决方法**: - 修改 `MAX_OFFLINE_MESSAGES` 常量 - 修改 `OFFLINE_MESSAGE_EXPIRE_SECONDS` 常量 ### Q4: Redis中看不到数据? **可能原因**: 1. 消息已过期被删除 2. 消息已被推送并清除 3. Redis数据库选择错误(应该是database 0) **验证方法**: ```bash # 确保使用正确的数据库 redis-cli -n 0 KEYS "offline:msg:*" ``` --- ## 🎉 测试成功标志 当你完成以上所有步骤后,应该看到: ✅ 消息可以成功保存 ✅ 消息可以正确获取 ✅ 消息可以删除指定数量 ✅ 消息可以全部清空 ✅ 用户上线时自动推送 ✅ 推送后自动清除 ✅ Redis中数据正确 ✅ 日志记录完整 **恭喜!离线消息功能已经可以正常使用了!** 🚀 --- ## 📚 下一步 - 阅读 [离线消息功能实现说明.md](./离线消息功能实现说明.md) 了解详细实现 - 阅读 [功能验证清单.md](./功能验证清单.md) 进行完整测试 - 阅读 [直播IM系统开发指南.md](./直播IM系统开发指南.md) 了解整体架构 --- **文档版本**: v1.0 **最后更新**: 2024-12-25