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