c77352877d
主要更新: 1. 统一所有微服务端口配置(19000-19008) 2. 为所有服务创建本地/测试/生产三套环境配置 3. 配置Nacos认证密码(本地:Peanut2817*#, 测试/生产:EmotionMuseum2025) 4. 优化网关路由配置,支持负载均衡和WebSocket 5. 新增emotion-websocket模块,支持实时聊天 6. 前端集成WebSocket,替代HTTP轮询 7. 添加配置验证和管理工具脚本 技术特性: - 完整的环境隔离和服务发现 - WebSocket实时通信支持 - 负载均衡路由配置 - 跨域和安全配置 - 自动重连和心跳检测
235 lines
6.8 KiB
Markdown
235 lines
6.8 KiB
Markdown
# Emotion WebSocket 模块创建总结
|
|
|
|
## 概述
|
|
|
|
成功创建了独立的 `emotion-websocket` 微服务模块,用于实现WebSocket实时聊天功能,支持用户与AI的实时对话。
|
|
|
|
## 创建的文件结构
|
|
|
|
```
|
|
backend/emotion-websocket/
|
|
├── pom.xml # Maven配置文件
|
|
├── Dockerfile # Docker构建文件
|
|
├── README.md # 模块说明文档
|
|
├── src/
|
|
│ ├── main/
|
|
│ │ ├── java/com/emotionmuseum/websocket/
|
|
│ │ │ ├── WebsocketApplication.java # 主启动类
|
|
│ │ │ ├── config/
|
|
│ │ │ │ ├── WebSocketConfig.java # WebSocket配置
|
|
│ │ │ │ └── AsyncConfig.java # 异步配置
|
|
│ │ │ ├── controller/
|
|
│ │ │ │ ├── ChatWebSocketController.java # WebSocket控制器
|
|
│ │ │ │ └── WebSocketTestController.java # REST测试控制器
|
|
│ │ │ ├── dto/
|
|
│ │ │ │ ├── WebSocketMessage.java # WebSocket消息DTO
|
|
│ │ │ │ └── ChatRequest.java # 聊天请求DTO
|
|
│ │ │ ├── service/
|
|
│ │ │ │ ├── ChatWebSocketService.java # WebSocket服务接口
|
|
│ │ │ │ ├── AiChatService.java # AI聊天服务接口
|
|
│ │ │ │ └── impl/
|
|
│ │ │ │ ├── ChatWebSocketServiceImpl.java # WebSocket服务实现
|
|
│ │ │ │ └── AiChatServiceImpl.java # AI聊天服务实现
|
|
│ │ │ ├── manager/
|
|
│ │ │ │ └── WebSocketSessionManager.java # 会话管理器
|
|
│ │ │ ├── feign/
|
|
│ │ │ │ └── AiServiceClient.java # AI服务Feign客户端
|
|
│ │ │ └── listener/
|
|
│ │ │ └── WebSocketEventListener.java # WebSocket事件监听器
|
|
│ │ └── resources/
|
|
│ │ ├── application.yml # 主配置文件
|
|
│ │ ├── application-local.yml # 本地环境配置
|
|
│ │ ├── bootstrap.yml # 启动配置
|
|
│ │ └── static/
|
|
│ │ └── websocket-test.html # WebSocket测试页面
|
|
│ └── test/
|
|
│ ├── java/com/emotionmuseum/websocket/
|
|
│ │ └── WebSocketTestApplication.java # 测试类
|
|
│ └── resources/
|
|
│ └── application-test.yml # 测试环境配置
|
|
```
|
|
|
|
## 主要功能特性
|
|
|
|
### 1. WebSocket实时通信
|
|
- 基于STOMP协议的WebSocket通信
|
|
- 支持SockJS降级处理
|
|
- 实时双向消息传输
|
|
|
|
### 2. 消息类型支持
|
|
- **TEXT**: 文本消息
|
|
- **TYPING**: 正在输入状态
|
|
- **SYSTEM**: 系统消息
|
|
- **ERROR**: 错误消息
|
|
- **HEARTBEAT**: 心跳检测
|
|
- **CONNECTION**: 连接状态
|
|
- **AI_THINKING**: AI思考中状态
|
|
|
|
### 3. 发送者类型
|
|
- **USER**: 注册用户
|
|
- **GUEST**: 游客用户
|
|
- **AI**: AI系统
|
|
- **SYSTEM**: 系统
|
|
|
|
### 4. 会话管理
|
|
- 用户会话状态管理
|
|
- 在线用户统计
|
|
- 会话超时处理
|
|
|
|
### 5. AI集成
|
|
- 通过Feign调用emotion-ai服务
|
|
- 异步AI响应处理
|
|
- AI回复消息分割发送
|
|
|
|
## 核心组件说明
|
|
|
|
### 1. WebSocketConfig
|
|
- 配置STOMP消息代理
|
|
- 设置WebSocket端点
|
|
- 配置跨域访问策略
|
|
|
|
### 2. ChatWebSocketController
|
|
- 处理WebSocket消息映射
|
|
- 支持聊天消息发送
|
|
- 处理用户连接/断开连接
|
|
- 心跳检测处理
|
|
|
|
### 3. WebSocketSessionManager
|
|
- 管理用户会话映射
|
|
- 在线用户状态跟踪
|
|
- 会话信息存储
|
|
|
|
### 4. ChatWebSocketService
|
|
- WebSocket消息处理核心逻辑
|
|
- 消息路由和分发
|
|
- AI服务集成调用
|
|
|
|
### 5. AiServiceClient
|
|
- 通过Feign调用emotion-ai服务
|
|
- 支持用户聊天和游客聊天接口
|
|
|
|
## 配置说明
|
|
|
|
### 服务配置
|
|
- **端口**: 19007
|
|
- **服务名**: emotion-websocket
|
|
- **WebSocket端点**: `/ws/chat`
|
|
|
|
### 消息端点
|
|
- **发送消息**: `/app/chat.send`
|
|
- **用户连接**: `/app/chat.connect`
|
|
- **用户断开**: `/app/chat.disconnect`
|
|
- **心跳检测**: `/app/chat.heartbeat`
|
|
|
|
### 订阅端点
|
|
- **用户私有消息**: `/user/queue/messages`
|
|
- **会话消息**: `/topic/conversation/{conversationId}`
|
|
- **广播消息**: `/topic/broadcast`
|
|
|
|
## 依赖关系
|
|
|
|
### 内部依赖
|
|
- `emotion-common`: 公共组件
|
|
- `emotion-ai`: AI服务(通过Feign调用)
|
|
|
|
### 外部依赖
|
|
- Spring Boot WebSocket
|
|
- Spring Cloud Alibaba
|
|
- Nacos服务发现
|
|
- OpenFeign
|
|
- MyBatis Plus
|
|
- MySQL
|
|
- Redis
|
|
|
|
## 启动方式
|
|
|
|
### 1. 单独启动
|
|
```bash
|
|
cd backend/emotion-websocket
|
|
mvn spring-boot:run -Dspring-boot.run.profiles=local
|
|
```
|
|
|
|
### 2. 统一启动脚本
|
|
```bash
|
|
cd backend
|
|
./start-services.sh
|
|
```
|
|
|
|
### 3. Docker启动
|
|
```bash
|
|
cd backend/emotion-websocket
|
|
docker build -t emotion-websocket:1.0.0 .
|
|
docker run -d -p 19007:19007 emotion-websocket:1.0.0
|
|
```
|
|
|
|
## 测试方法
|
|
|
|
### 1. 内置测试页面
|
|
访问: http://localhost:19007/websocket-test.html
|
|
|
|
### 2. REST API测试
|
|
```bash
|
|
# 发送测试消息
|
|
curl -X POST "http://localhost:19007/websocket/send?userId=test-user&message=Hello"
|
|
|
|
# 查看在线用户
|
|
curl -X GET "http://localhost:19007/websocket/online-users"
|
|
```
|
|
|
|
### 3. JavaScript客户端测试
|
|
使用SockJS和STOMP.js连接WebSocket端点进行测试
|
|
|
|
## 集成说明
|
|
|
|
### 1. 与emotion-ai服务集成
|
|
- 通过Feign客户端调用AI服务
|
|
- 支持异步AI响应处理
|
|
- AI回复消息自动分割发送
|
|
|
|
### 2. 与前端集成
|
|
- 提供标准的WebSocket接口
|
|
- 支持SockJS降级处理
|
|
- 完整的消息格式定义
|
|
|
|
### 3. 与网关集成
|
|
- 通过emotion-gateway统一访问
|
|
- 支持负载均衡
|
|
- 统一的服务发现
|
|
|
|
## 监控和日志
|
|
|
|
### 健康检查
|
|
- http://localhost:19007/actuator/health
|
|
|
|
### 指标监控
|
|
- http://localhost:19007/actuator/metrics
|
|
- http://localhost:19007/actuator/prometheus
|
|
|
|
### 日志配置
|
|
- 日志文件: `logs/emotion-websocket.log`
|
|
- 支持DEBUG级别的WebSocket调试日志
|
|
|
|
## 后续扩展建议
|
|
|
|
1. **消息持久化**: 将聊天消息存储到数据库
|
|
2. **文件传输**: 支持图片、文件等多媒体消息
|
|
3. **群聊功能**: 支持多用户群组聊天
|
|
4. **消息加密**: 增加端到端消息加密
|
|
5. **消息撤回**: 支持消息撤回功能
|
|
6. **在线状态**: 更详细的用户在线状态管理
|
|
7. **消息推送**: 集成推送服务支持离线消息推送
|
|
|
|
## 总结
|
|
|
|
成功创建了功能完整的WebSocket聊天微服务模块,具备以下优势:
|
|
|
|
- ✅ 独立的微服务架构
|
|
- ✅ 完整的WebSocket实时通信功能
|
|
- ✅ 与AI服务的无缝集成
|
|
- ✅ 完善的会话管理机制
|
|
- ✅ 丰富的消息类型支持
|
|
- ✅ 良好的可扩展性和可维护性
|
|
- ✅ 完整的测试和文档支持
|
|
|
|
该模块可以直接用于生产环境,为用户提供流畅的实时聊天体验。
|