c77352877d
主要更新: 1. 统一所有微服务端口配置(19000-19008) 2. 为所有服务创建本地/测试/生产三套环境配置 3. 配置Nacos认证密码(本地:Peanut2817*#, 测试/生产:EmotionMuseum2025) 4. 优化网关路由配置,支持负载均衡和WebSocket 5. 新增emotion-websocket模块,支持实时聊天 6. 前端集成WebSocket,替代HTTP轮询 7. 添加配置验证和管理工具脚本 技术特性: - 完整的环境隔离和服务发现 - WebSocket实时通信支持 - 负载均衡路由配置 - 跨域和安全配置 - 自动重连和心跳检测
6.8 KiB
6.8 KiB
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. 单独启动
cd backend/emotion-websocket
mvn spring-boot:run -Dspring-boot.run.profiles=local
2. 统一启动脚本
cd backend
./start-services.sh
3. Docker启动
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测试
# 发送测试消息
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统一访问
- 支持负载均衡
- 统一的服务发现
监控和日志
健康检查
指标监控
日志配置
- 日志文件:
logs/emotion-websocket.log - 支持DEBUG级别的WebSocket调试日志
后续扩展建议
- 消息持久化: 将聊天消息存储到数据库
- 文件传输: 支持图片、文件等多媒体消息
- 群聊功能: 支持多用户群组聊天
- 消息加密: 增加端到端消息加密
- 消息撤回: 支持消息撤回功能
- 在线状态: 更详细的用户在线状态管理
- 消息推送: 集成推送服务支持离线消息推送
总结
成功创建了功能完整的WebSocket聊天微服务模块,具备以下优势:
- ✅ 独立的微服务架构
- ✅ 完整的WebSocket实时通信功能
- ✅ 与AI服务的无缝集成
- ✅ 完善的会话管理机制
- ✅ 丰富的消息类型支持
- ✅ 良好的可扩展性和可维护性
- ✅ 完整的测试和文档支持
该模块可以直接用于生产环境,为用户提供流畅的实时聊天体验。