如何将 ActiveMQ Artemis 安装为 Windows 服务?

如何将 ActiveMQ Artemis 安装为 Windows 服务?

标题有点误导,因为我知道如何将 artemis 安装为 Windows 服务,根据文档,只需运行

artemis-service.exe install

这对我来说不起作用。我尝试使用 ActiveMQ Artemis 版本 2.31 和 2.29 安装和运行该服务。对于这两个版本,运行该服务都会生成以下日志artemis-service.wrapper.log

2023-10-23 10:19:50,116 DEBUG - Starting WinSW in the service mode
2023-10-23 10:19:50,147 INFO  - Starting %JAVA_HOME%\bin\java.exe  -XX:+UseParallelGC -Xms512M -Xmx1024M -classpath "C:\Program Files (x86)\apache-artemis-2.31.0\lib\artemis-boot.jar" "-Dartemis.home=C:\Program Files (x86)\apache-artemis-2.31.0" -Dartemis.instance=C:\ArtemisBroker -Ddata.dir=C:\ArtemisBroker\data -Dartemis.instance.etc=C:\ArtemisBroker\etc -Djava.security.auth.login.config=C:\ArtemisBroker\etc\login.config -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline="true" -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=file:/C:/ArtemisBroker/etc/jolokia-access.xml org.apache.activemq.artemis.boot.Artemis run 
2023-10-23 10:19:50,178 DEBUG - Completed. Exit code is 0

并弹出以下警告:

在此处输入图片描述

唯一提供某种提示的来源是 Windows 事件日志,其中包含以下条目:

在此处输入图片描述

Service cannot be started. System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at winsw.Util.ProcessHelper.StartProcessAndCallbackForExit(Process processToStart, String executable, String arguments, Dictionary`2 envVars, String workingDirectory, Nullable`1 priority, ProcessCompletionCallback callback, Boolean redirectStdin, LogHandler logHandler, Boolean hideWindow)
   at winsw.WrapperService.StartProcess(Process processToStart, String arguments, String executable, LogHandler logHandler, Boolean redirectStdin)
   at winsw.WrapperService.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

我检查了执行命令中的所有路径,但一切似乎都很好。

我唯一注意到的是

<startargument>-Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%/jolokia-access.xml</startargument>

<env name="ARTEMIS_INSTANCE_ETC_URI" value="file:/C:/ArtemisBroker/etc/"/>

然后artemis-service.xml解析为

-Djolokia.policyLocation=file:/C:/ArtemisBroker/etc//jolokia-access.xml org.apache.activemq.artemis.boot.Artemis

这似乎有点错误,但改变这一点(删除一个/)不会改变任何东西。

如何解决这个问题?

答案1

感谢 Greg 的评论,我找到了问题所在。使用 Sysinternals 进程监视器,经过一些过滤后,我发现了以下条目:

在此处输入图片描述

这意味着,服务启动甚至找不到用于启动的 java 可执行文件。路径显示%JAVA_HOME%实际上找不到环境变量(程序扫描 PATH 并插入子路径字符串)。

我对此感到很惊讶,因为我很确定我已经设置了该变量 - 我的错误是将其设置为用户变量而不是系统变量。显然,Windows 以我登录的用户身份在其他用户下启动该服务,因此无法找到该变量。

设置%JAVA_HOME%为系统环境变量解决了此问题。

相关内容