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

340 lines
6.6 KiB
Markdown
Raw Normal View History

# 离线消息功能 - 快速开始指南
## 🚀 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