Как установить 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

Благодаря комментарию Грега я смог разобраться в проблеме. Используя монитор процессов Sysinternals, после некоторой фильтрации я нашел следующие записи:

введите описание изображения здесь

Это означает, что запуск службы не смог даже найти исполняемый файл java для запуска. Пути показывают, что переменная окружения %JAVA_HOME%на самом деле не может быть найдена (и программа сканирует PATH, подключая строку subpath).

Я был удивлен этим, так как я был почти уверен, что установил переменную - моя ошибка была в том, что я установил ее как пользовательскую переменную, а не системную. Видимо, Windows запускает службу под другим пользователем, как под тем пользователем, под которым я вошел в систему, поэтому переменная не может быть найдена.

Эту проблему удалось решить, задав %JAVA_HOME%системную переменную среды.

Связанный контент