【基础环境】rocketmq启动脚本,修复计划任务无法正常启动proxy的异常

This commit is contained in:
yuejiajun 2025-08-19 16:38:40 +08:00
parent c832bac92a
commit 64c5f6bf3d

View File

@ -1,118 +1,80 @@
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title RocketMQ 5.x Quick Start (with Proxy)
title RocketMQ Quick Start
set "SCRIPT_DIR=%~dp0"
cd /d "%SCRIPT_DIR%"
if "%ROCKETMQ_HOME%" == "" (
set "ROCKETMQ_HOME=%~dp0.."
set "ROCKETMQ_HOME=%SCRIPT_DIR%.."
echo [INFO] ROCKETMQ_HOME is not set, using default: !ROCKETMQ_HOME!
)
if not exist "%ROCKETMQ_HOME%\bin\mqnamesrv.cmd" (
echo [ERROR] mqnamesrv.cmd not found in %ROCKETMQ_HOME%\bin
echo Please set correct ROCKETMQ_HOME environment variable
pause
exit /b 1
)
if "%JAVA_HOME%" == "" (
echo [WARN] JAVA_HOME is not set, trying to find Java automatically...
goto :FOUNING_JAVA
call :FIND_JAVA
if errorlevel 1 (
echo [ERROR] Java not found
exit /b 1
)
) else (
if not exist "%JAVA_HOME%\bin\java.exe" (
echo [WARN] %JAVA_HOME%\bin\java.exe is not exist, trying to find Java automatically...
goto :FOUNING_JAVA
)
goto :START_SERVER
)
:FOUNING_JAVA
echo FOUNDING ===== START
for %%d in (
"%ProgramFiles%\Java\"
"%ProgramFiles(x86)%\Java\"
"%~dp0..\jdk"
"%~dp0..\java"
"%~dp0..\..\jdk"
"%~dp0..\..\java"
) do (
echo [INFO] == %%~d
if exist "%%~d\bin\java.exe" (
set "JAVA_HOME=%%~d"
echo [INFO] Found Java at: !JAVA_HOME!
goto :START_SERVER
call :FIND_JAVA
if errorlevel 1 (
echo [ERROR] Java not found
exit /b 1
)
)
)
echo FOUNDING ===== END
goto :NOT_FOUND_JAVA
:NOT_FOUND
echo [ERROR] java.exe not found in %JAVA_HOME%\bin
echo Please set correct JAVA_HOME environment variable
pause
exit /b 1
:NOT_FOUND_JAVA
echo [ERROR] Java not found automatically and JAVA_HOME is not set
echo Please install Java or set JAVA_HOME environment variable
pause
exit /b 1
:START_SERVER
echo [INFO] Using JAVA_HOME: %JAVA_HOME%
echo [INFO] Starting NameServer...
start "RocketMQ NameServer" /B cmd /c ""%ROCKETMQ_HOME%\bin\mqnamesrv.cmd""
if exist "%ROCKETMQ_HOME%\sbin\store\" (
set "INITIAL=TRUE"
)
timeout /t 3 /nobreak >nul
start "RocketMQ NameServer" cmd /k "%ROCKETMQ_HOME%\bin\mqnamesrv.cmd"
echo [INFO] Starting Broker...
start "RocketMQ Broker" /B cmd /c ""%ROCKETMQ_HOME%\bin\mqbroker.cmd" -c ../conf/broker-localhost.conf"
timeout /t 2 /nobreak >nul
start "RocketMQ Broker" cmd /k "%ROCKETMQ_HOME%\bin\mqbroker.cmd" -c ../conf/broker-localhost.conf
timeout /t 2 /nobreak >nul
timeout /t 5 /nobreak >nul
set MAX_RETRY=5
set RETRY_COUNT=0
:START_PROXY
set /a RETRY_COUNT+=1
start "RocketMQ Proxy" cmd /k "%ROCKETMQ_HOME%\bin\mqproxy.cmd" -n localhost:9876
echo [INFO] Starting Proxy (Attempt !RETRY_COUNT!/!MAX_RETRY!)...
start "RocketMQ Proxy" /B cmd /c ""%ROCKETMQ_HOME%\bin\mqproxy.cmd" -n localhost:9876"
echo [INFO] Checking if the proxy has started successfully ..
timeout /t 5 /nobreak >nul
:CHECK_PORT
timeout /t 2 /nobreak >nul
netstat -ano | findstr ":8081" | findstr "LISTENING" >nul
if %ERRORLEVEL% equ 0 (
echo [INFO] Proxy started successfully, port 8081 is listening.
goto :START_DASHBOARD
) else (
echo [WARN] Proxy Startup failed, port 8081 is not listening [attempted !RETRY_COUNT!/!MAX_RETRY!]
if !RETRY_COUNT! lss !MAX_RETRY! (
timeout /t 2 /nobreak >nul
taskkill /FI "WINDOWTITLE eq RocketMQ Proxy" /F >nul 2>&1
goto :START_PROXY
) else (
echo [ERROR] Proxy Startup failed, maximum retry attempts have been reached !MAX_RETRY!
goto :START_DASHBOARD
)
echo [INFO] Checking proxy status...
set PORT_OPEN=0
for /l %%i in (1,1,10) do (
timeout /t 1 /nobreak >nul
netstat -ano | findstr ":8081" | findstr "LISTENING" >nul && set PORT_OPEN=1
if !PORT_OPEN! equ 1 goto :PROXY_SUCCESS
)
if !RETRY_COUNT! lss !MAX_RETRY! (
taskkill /f /im java.exe /fi "WINDOWTITLE eq RocketMQ Proxy" >nul 2>&1
goto :START_PROXY
) else (
echo [ERROR] Failed to start Proxy after !MAX_RETRY! attempts
goto :START_DASHBOARD
)
:PROXY_SUCCESS
echo [INFO] Proxy started successfully
:START_DASHBOARD
:: 7. 启动 Dashboard可选
if exist "%ROCKETMQ_HOME%\bin\rocketmq-dashboard.jar" (
start "RocketMQ Dashboard" cmd /k "%JAVA_HOME%\bin\java -jar -Dserver.port=8088 %ROCKETMQ_HOME%\bin\rocketmq-dashboard.jar"
echo [INFO] Starting Dashboard...
start "RocketMQ Dashboard" /B cmd /c ""%JAVA_HOME%\bin\java" -jar -Dserver.port=8088 "%ROCKETMQ_HOME%\bin\rocketmq-dashboard.jar""
)
:: =============================================
:: Status Display
:: =============================================
echo.
echo ========================================
echo RocketMQ Services Successfully Started
echo RocketMQ Services Status
echo ========================================
echo - NameServer (Port: 9876)
echo - Broker (Port: 10911)
@ -121,5 +83,21 @@ echo - Dashboard (Port: 8080)
echo ========================================
echo.
pause
endlocal
exit /b 0
:FIND_JAVA
for %%d in (
"%ProgramFiles%\Java\"
"%ProgramFiles(x86)%\Java\"
"%ROCKETMQ_HOME%\jdk"
"%ROCKETMQ_HOME%\java"
"%ROCKETMQ_HOME%\..\jdk"
"%ROCKETMQ_HOME%\..\java"
) do (
if exist "%%~d\bin\java.exe" (
set "JAVA_HOME=%%~d"
echo [INFO] Found Java at: !JAVA_HOME!
exit /b 0
)
)
exit /b 1