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

340 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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