Files
happy-life-star/backend/emotion-websocket-模块创建总结.md
T
peanut c77352877d feat: 完成Nacos配置优化和WebSocket集成
主要更新:
1. 统一所有微服务端口配置(19000-19008)
2. 为所有服务创建本地/测试/生产三套环境配置
3. 配置Nacos认证密码(本地:Peanut2817*#, 测试/生产:EmotionMuseum2025)
4. 优化网关路由配置,支持负载均衡和WebSocket
5. 新增emotion-websocket模块,支持实时聊天
6. 前端集成WebSocket,替代HTTP轮询
7. 添加配置验证和管理工具脚本

技术特性:
- 完整的环境隔离和服务发现
- WebSocket实时通信支持
- 负载均衡路由配置
- 跨域和安全配置
- 自动重连和心跳检测
2025-07-17 18:10:45 +08:00

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调试日志

后续扩展建议

  1. 消息持久化: 将聊天消息存储到数据库
  2. 文件传输: 支持图片、文件等多媒体消息
  3. 群聊功能: 支持多用户群组聊天
  4. 消息加密: 增加端到端消息加密
  5. 消息撤回: 支持消息撤回功能
  6. 在线状态: 更详细的用户在线状态管理
  7. 消息推送: 集成推送服务支持离线消息推送

总结

成功创建了功能完整的WebSocket聊天微服务模块,具备以下优势:

  • 独立的微服务架构
  • 完整的WebSocket实时通信功能
  • 与AI服务的无缝集成
  • 完善的会话管理机制
  • 丰富的消息类型支持
  • 良好的可扩展性和可维护性
  • 完整的测试和文档支持

该模块可以直接用于生产环境,为用户提供流畅的实时聊天体验。