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:
+101
-123
@@ -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环境启动"
|
||||
|
||||
Reference in New Issue
Block a user