当 JAVA_HOME 指向 JRE 1.8 时,无法使用 activemq-admin.bat 停止 JMS 代理
Can not stop a JMS broker using activemq-admin.bat when the JAVA_HOME points to JRE 1.8
当 JAVA_HOME 指向 JRE (1.8.111) 时,我无法使用 activemq-admin.bat 脚本停止 JMS 代理。使用 JDK 时不会出现此问题。
在脚本中,取消注释 ACTIVEMQ_SUNJMX_START 参数并将默认端口更改为 61099,如下所示:
"set ACTIVEMQ_SUNJMX_START=-Dcom.sun.management.jmxremote.port=61099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
端口似乎被忽略了......
我们需要 JDK 来停止代理吗?
有什么想法吗?
JRE 1.8.111
<em>路径</em>\bin>调用“..\middleware\apache-activemq-5.14.0\bin\activemq-admin.bat”"stop"
Java 运行时:Oracle Corporation 1.8.0_111 C:\Program Files\Java\jre1.8.0_111
堆大小:current=251392k free=248770k max=3706880k
JVM 参数:-Dactivemq.classpath=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf;_PROGRAM_DATA_\middleware\apache-activemq-5。 14.0; -Dactivemq.home=<em>路径</em>\middleware\apache-activemq-5.14.0\bin..-Dactivemq.base=<em>路径</em>\middleware\apache-activemq-5.14.0\bin.. -Dactivemq.data=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0 -Djava.io.tmpdir=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0\tmp -Dactivemq.conf=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
扩展类路径:
[<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib,<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib\camel,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\optional,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\web,<em>路径</em>\middleware\apache-activemq-5.14.0\bin ..\lib\extra]
ACTIVEMQ_HOME: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_BASE: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_CONF: <em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
ACTIVEMQ_DATA: _PROGRAM_DATA_\middleware\apache-activemq-5.14.0
连接到 JMX URL:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
信息:经纪人在以下位置不可用:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
JDK 1.8.111
<em>路径</em>\bin>调用“..\middleware\apache-activemq-5.14.0\bin\activemq-admin.bat”"stop"
Java 运行时:Oracle Corporation 1.8.0_111 C:\Program Files\Java\jdk1.8.0_111\jre
堆大小:current=251392k free=248770k max=3706880k
JVM 参数:-Dactivemq.classpath=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf;_PROGRAM_DATA_\middleware\apache-activemq-5。 14.0; -Dactivemq.home=<em>路径</em>\middleware\apache-activemq-5.14.0\bin..-Dactivemq.base=<em>路径</em>\middleware\apache-activemq-5.14.0\bin.. -Dactivemq.data=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0 -Djava.io.tmpdir=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0\tmp -Dactivemq.conf=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
扩展类路径:
[<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib,<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib\camel,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\optional,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\web,<em>路径</em>\middleware\apache-activemq-5.14.0\bin ..\lib\extra]
ACTIVEMQ_HOME: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_BASE: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_CONF: <em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
ACTIVEMQ_DATA: _PROGRAM_DATA_\middleware\apache-activemq-5.14.0
useJmxServiceUrl 发现 JMS Url: service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2Z
XIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE5Mi4xNjguMTAwLjIwAAD9nHXsmR+4orQ3llsk9wAAAVhxZdSygAIAeA==
连接到 pid:5020
止损经纪商:MYBROKER
这是因为 ActiveMQ 使用 Java Attach API to automatically discover the JMX URL. To use this API the classes are loaded from $JAVA_HOME\..\lib\tools.jar
. As tools.jar
is part of the JDK (see JDK files) 这对于 JRE(不是 JDK $JDK_HOME\jre
附带的那个)会失败。
要使用 JRE 停止代理,您必须提供 JMX URL。
set ACTIVEMQ_OPTS=-Dactivemq.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:61099/jmxrmi
activemq-admin.bat stop
连接消息看起来像
Connecting to JMX URL: service:jmx:rmi:///jndi/rmi://localhost:61099/jmxrmi
当 JAVA_HOME 指向 JRE (1.8.111) 时,我无法使用 activemq-admin.bat 脚本停止 JMS 代理。使用 JDK 时不会出现此问题。 在脚本中,取消注释 ACTIVEMQ_SUNJMX_START 参数并将默认端口更改为 61099,如下所示:
"set ACTIVEMQ_SUNJMX_START=-Dcom.sun.management.jmxremote.port=61099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
端口似乎被忽略了......
我们需要 JDK 来停止代理吗? 有什么想法吗?
JRE 1.8.111
<em>路径</em>\bin>调用“..\middleware\apache-activemq-5.14.0\bin\activemq-admin.bat”"stop"
Java 运行时:Oracle Corporation 1.8.0_111 C:\Program Files\Java\jre1.8.0_111
堆大小:current=251392k free=248770k max=3706880k
JVM 参数:-Dactivemq.classpath=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf;_PROGRAM_DATA_\middleware\apache-activemq-5。 14.0; -Dactivemq.home=<em>路径</em>\middleware\apache-activemq-5.14.0\bin..-Dactivemq.base=<em>路径</em>\middleware\apache-activemq-5.14.0\bin.. -Dactivemq.data=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0 -Djava.io.tmpdir=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0\tmp -Dactivemq.conf=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
扩展类路径:
[<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib,<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib\camel,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\optional,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\web,<em>路径</em>\middleware\apache-activemq-5.14.0\bin ..\lib\extra]
ACTIVEMQ_HOME: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_BASE: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_CONF: <em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
ACTIVEMQ_DATA: _PROGRAM_DATA_\middleware\apache-activemq-5.14.0
连接到 JMX URL:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
信息:经纪人在以下位置不可用:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
JDK 1.8.111
<em>路径</em>\bin>调用“..\middleware\apache-activemq-5.14.0\bin\activemq-admin.bat”"stop"
Java 运行时:Oracle Corporation 1.8.0_111 C:\Program Files\Java\jdk1.8.0_111\jre
堆大小:current=251392k free=248770k max=3706880k
JVM 参数:-Dactivemq.classpath=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf;_PROGRAM_DATA_\middleware\apache-activemq-5。 14.0; -Dactivemq.home=<em>路径</em>\middleware\apache-activemq-5.14.0\bin..-Dactivemq.base=<em>路径</em>\middleware\apache-activemq-5.14.0\bin.. -Dactivemq.data=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0 -Djava.io.tmpdir=_PROGRAM_DATA_\middleware\apache-activemq-5.14.0\tmp -Dactivemq.conf=<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
扩展类路径:
[<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib,<em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\lib\camel,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\optional,<em>路径</em>\middleware\apache-activemq-5.14.0\bin..\lib\web,<em>路径</em>\middleware\apache-activemq-5.14.0\bin ..\lib\extra]
ACTIVEMQ_HOME: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_BASE: <em>路径</em>\middleware\apache-activemq-5.14.0\bin..
ACTIVEMQ_CONF: <em>PATH</em>\middleware\apache-activemq-5.14.0\bin..\conf
ACTIVEMQ_DATA: _PROGRAM_DATA_\middleware\apache-activemq-5.14.0
useJmxServiceUrl 发现 JMS Url: service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2Z
XIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE5Mi4xNjguMTAwLjIwAAD9nHXsmR+4orQ3llsk9wAAAVhxZdSygAIAeA==
连接到 pid:5020
止损经纪商:MYBROKER
这是因为 ActiveMQ 使用 Java Attach API to automatically discover the JMX URL. To use this API the classes are loaded from $JAVA_HOME\..\lib\tools.jar
. As tools.jar
is part of the JDK (see JDK files) 这对于 JRE(不是 JDK $JDK_HOME\jre
附带的那个)会失败。
要使用 JRE 停止代理,您必须提供 JMX URL。
set ACTIVEMQ_OPTS=-Dactivemq.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:61099/jmxrmi
activemq-admin.bat stop
连接消息看起来像
Connecting to JMX URL: service:jmx:rmi:///jndi/rmi://localhost:61099/jmxrmi