zhibo/Zhibo/离线消息快速开始.md

6.6 KiB
Raw Blame History

离线消息功能 - 快速开始指南

🚀 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: 配置测试参数

在测试页面中:

  1. API基础地址: http://localhost:8081 (默认)
  2. 用户ID: 1 (可以修改为任意数字)

步骤4: 测试保存消息

点击 "保存10条测试消息" 按钮

预期结果:

{
  "success": true,
  "message": "成功保存 10 条测试消息"
}

步骤5: 查看消息

点击 "获取消息列表" 按钮

预期结果:

  • 显示统计卡片:消息数量 = 10
  • 显示消息列表包含10条测试消息
  • 每条消息显示内容和时间戳

步骤6: 删除消息

  1. "删除数量" 输入框中输入 5
  2. 点击 "删除指定数量" 按钮

预期结果:

{
  "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: 消息没有保存?

检查步骤:

  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

验证方法:

# 确保使用正确的数据库
redis-cli -n 0 KEYS "offline:msg:*"

🎉 测试成功标志

当你完成以上所有步骤后,应该看到:

消息可以成功保存
消息可以正确获取
消息可以删除指定数量
消息可以全部清空
用户上线时自动推送
推送后自动清除
Redis中数据正确
日志记录完整

恭喜!离线消息功能已经可以正常使用了! 🚀


📚 下一步


文档版本: v1.0
最后更新: 2024-12-25