feat: 完成Nacos配置优化和WebSocket集成

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

技术特性:
- 完整的环境隔离和服务发现
- WebSocket实时通信支持
- 负载均衡路由配置
- 跨域和安全配置
- 自动重连和心跳检测
This commit is contained in:
2025-07-17 18:10:45 +08:00
parent 9a3a8267b5
commit c77352877d
391 changed files with 46585 additions and 4294 deletions
+101 -123
View File
@@ -1,156 +1,134 @@
#!/bin/bash
# 情博物馆微服务启动脚本
# 作者: emotion-museum
# 日期: 2025-07-12
# 情博物馆微服务启动脚本
# 支持环境参数控制
# 默认环境
DEFAULT_ENV="local"
ENV=${1:-$DEFAULT_ENV}
echo "=========================================="
echo "情博物馆微服务启动脚本"
echo "情博物馆微服务启动脚本"
echo "启动环境: $ENV"
echo "=========================================="
# 检查Java环境
if ! command -v java &> /dev/null; then
echo "错误: 未找到Java环境,请安装JDK 17+"
exit 1
fi
# 检查Maven环境
if ! command -v mvn &> /dev/null; then
echo "错误: 未找到Maven环境,请安装Maven 3.6+"
exit 1
fi
# 检查Nacos是否运行
echo "检查Nacos服务状态..."
if ! curl -s http://localhost:8848/nacos/v1/ns/operator/metrics > /dev/null; then
echo "警告: Nacos服务未运行,请先启动Nacos"
echo "启动命令: sh nacos/bin/startup.sh -m standalone"
read -p "是否继续启动微服务? (y/n): " continue_start
if [[ $continue_start != "y" && $continue_start != "Y" ]]; then
# 检查基础服务
check_services() {
echo "📊 检查基础服务..."
if ! nc -z localhost 3306; then
echo "❌ MySQL服务未启动,请先启动MySQL服务"
echo "可以使用: brew services start mysql"
exit 1
fi
fi
# 检查MySQL是否运行
echo "检查MySQL服务状态..."
if ! mysqladmin ping -h localhost --silent; then
echo "警告: MySQL服务未运行,请先启动MySQL"
read -p "是否继续启动微服务? (y/n): " continue_start
if [[ $continue_start != "y" && $continue_start != "Y" ]]; then
if ! nc -z localhost 6379; then
echo "❌ Redis服务未启动,请先启动Redis服务"
echo "可以使用: brew services start redis"
exit 1
fi
fi
# 检查Redis是否运行
echo "检查Redis服务状态..."
if ! redis-cli ping > /dev/null 2>&1; then
echo "警告: Redis服务未运行,请先启动Redis"
read -p "是否继续启动微服务? (y/n): " continue_start
if [[ $continue_start != "y" && $continue_start != "Y" ]]; then
exit 1
fi
fi
# 编译项目
echo "编译项目..."
mvn clean compile -DskipTests
if [ $? -ne 0 ]; then
echo "错误: 项目编译失败"
exit 1
fi
echo "编译成功!"
echo "✅ 基础服务检查通过"
}
# 启动服务函数
start_service() {
local service_name=$1
local service_port=$2
local port=$2
local description=$3
echo "启动 $service_name 服务 (端口: $service_port)..."
echo "🚀 启动 $description ($service_name:$port)..."
cd $service_name
nohup mvn spring-boot:run > ../logs/${service_name}.log 2>&1 &
local pid=$!
echo $pid > ../logs/${service_name}.pid
# 检查端口是否被占用
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then
echo "⚠️ 端口 $port 已被占用,跳过 $service_name"
cd ..
return
fi
# 编译项目
echo "📦 编译 $service_name..."
mvn clean package -DskipTests -q
if [ $? -ne 0 ]; then
echo "$service_name 编译失败"
cd ..
return
fi
# 启动服务
echo "🔄 启动 $service_name (环境: $ENV)..."
nohup java -jar -Dspring.profiles.active=$ENV target/$service_name-1.0.0.jar > ../logs/$service_name-$ENV.log 2>&1 &
# 记录PID
echo $! > ../logs/$service_name.pid
echo "$service_name 启动完成,PID: $!"
echo "📋 日志文件: logs/$service_name-$ENV.log"
cd ..
echo "$service_name 服务启动中... PID: $pid"
# 等待服务启动
local count=0
while [ $count -lt 30 ]; do
if curl -s http://localhost:$service_port/actuator/health > /dev/null 2>&1; then
echo "$service_name 服务启动成功!"
return 0
fi
sleep 2
count=$((count + 1))
echo -n "."
done
echo ""
echo "警告: $service_name 服务启动超时,请检查日志"
return 1
sleep 3
}
# 创建日志目录
mkdir -p logs
# 启动服务
echo "开始启动微服务..."
# 检查基础服务
check_services
# 1. 启动网关服务
start_service "emotion-gateway" 9000
# 服务列表
services=(
"emotion-user:19001:用户服务"
"emotion-ai:19002:AI服务"
"emotion-websocket:19007:WebSocket聊天服务"
"emotion-gateway:19000:网关服务"
)
# 2. 启动用户服务
start_service "emotion-user" 9001
echo "🚀 开始启动核心服务 (环境: $ENV)..."
# 3. 启动AI对话服务
start_service "emotion-ai" 9002
# 4. 启动情绪记录服务
start_service "emotion-record" 9003
# 5. 启动成长课题服务
start_service "emotion-growth" 9004
# 6. 启动地图探索服务
start_service "emotion-explore" 9005
# 7. 启动成就奖励服务
start_service "emotion-reward" 9006
# 8. 启动统计分析服务
start_service "emotion-stats" 9007
# 按顺序启动服务
for service_info in "${services[@]}"; do
IFS=':' read -r service_name port description <<< "$service_info"
start_service "$service_name" "$port" "$description"
done
echo ""
echo "=========================================="
echo "微服务启动完成!"
echo "=========================================="
echo "服务状态:"
echo "- 网关服务: http://localhost:9000"
echo "- 用户服务: http://localhost:9001"
echo "- AI对话服务: http://localhost:9002"
echo "- 情绪记录服务: http://localhost:9003"
echo "- 成长课题服务: http://localhost:9004"
echo "- 地图探索服务: http://localhost:9005"
echo "- 成就奖励服务: http://localhost:9006"
echo "- 统计分析服务: http://localhost:9007"
echo "🎉 核心服务启动完成!"
echo ""
echo "监控地址:"
echo "- 网关监控: http://localhost:9000/actuator/health"
echo "- 用户监控: http://localhost:9001/actuator/health"
echo "- AI对话监控: http://localhost:9002/actuator/health"
echo "- 情绪记录监控: http://localhost:9003/actuator/health"
echo "- 成长课题监控: http://localhost:9004/actuator/health"
echo "- 地图探索监控: http://localhost:9005/actuator/health"
echo "- 成就奖励监控: http://localhost:9006/actuator/health"
echo "- 统计分析监控: http://localhost:9007/actuator/health"
echo "📋 服务列表:"
for service_info in "${services[@]}"; do
IFS=':' read -r service_name port description <<< "$service_info"
echo " $description: http://localhost:$port"
done
echo ""
echo "API文档地址:"
echo "- 网关API: http://localhost:9000/doc.html"
echo "📝 使用 './stop-services.sh' 停止所有服务"
echo "📝 查看日志: tail -f logs/服务名-$ENV.log"
# 等待服务完全启动
echo ""
echo "日志文件位置: ./logs/"
echo "停止服务命令: ./stop-services.sh"
echo "=========================================="
echo "📊 等待服务完全启动..."
sleep 15
# 检查服务状态
echo "📊 检查服务状态..."
for service_info in "${services[@]}"; do
IFS=':' read -r service_name port description <<< "$service_info"
if curl -s http://localhost:$port/actuator/health >/dev/null 2>&1; then
echo "$description 运行正常"
else
echo "⚠️ $description 可能未完全启动,请查看日志: tail -f logs/$service_name-$ENV.log"
fi
done
echo ""
echo "🎉 启动完成!环境: $ENV"
echo ""
echo "使用方法:"
echo " ./start-services.sh # 使用默认local环境启动"
echo " ./start-services.sh dev # 使用dev环境启动"
echo " ./start-services.sh prod # 使用prod环境启动"