我在服务器上运行的ActiveMQ 5.10.0,并且我试图使用命令行提取在AMQ Web控制台(https://activemq.apache.org/web-console)中看到的信息。
命令行均不起作用。即。在bin文件夹中是activemq
脚本来执行命令行(例如./activemq bstat
或./activemq list
),但我一直收到此错误:
Connecting to JMX URL: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
ERROR: java.lang.RuntimeException: Failed to execute list task. Reason: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused]
java.lang.RuntimeException: Failed to execute list task. Reason: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
奇怪的是,当我在本地PC上下载并启动相同版本的AMQ时,AMQ命令行起作用。这是尝试list
命令时得到的输出:
>activemq list
Java Runtime: Oracle Corporation 1.8.0_161 C:\Program Files\Java\jdk1.8.0_161\jre
Heap sizes: current=1005056k free=989327k max=1005056k
JVM args: -Dcom.sun.management.jmxremote -Xms1G -Xmx1G -Djava.util.logging.config.file=logging.properties -
...........
<more log data>
...........
useJmxServiceUrl Found JMS Url: service:jmx:rmi://127.0.0.1/stub/rO0ABXNyAC5qYXZheC5tYW5hZ2VtZW50LnJlbW90ZS5ybWkuUk1JU2VydmVySW1wbF9TdHViAAAAAAAAAAICAAB4cgAaamF2YS5ybWkuc2VydmVyLlJlbW90ZVN0dWLp/tzJi+FlGgIAAHhyABxqYXZhLnJtaS5zZXJ2ZXIuUmVtb3RlT2JqZWN002G0kQxhMx4DAAB4cHc5AAtVbmljYXN0UmVmMgAADjE2OS4yNTQuNjguMjM3AADDoqnwRJwaEyt6UvhZyAAAAXFkS9pNgAEAeA==
Connecting to pid: 3332
brokerName = localhost
如何获得与远程服务器上运行的命令相同的命令?
因此,在StackOverflow和其他站点上查看类似的问题,似乎我需要在ActiveMQ启动时向其添加JVM参数。
AMQ的bin文件夹包含脚本activemq
,在该脚本启动activemq.jar
文件的同一bin文件夹中。
我需要更新脚本文件的一部分以包含那些JVM参数(在脚本中,该行末不包含#注释:]
<script code above>
# Execute java binary
if [ -n "$PIDFILE" ] && [ "$PIDFILE" != "stop" ];then
$EXEC_OPTION $DOIT_PREFIX "$JAVACMD $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
-Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
-Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
-Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
-Dactivemq.conf=\"${ACTIVEMQ_CONF}\" \
-Dactivemq.data=\"${ACTIVEMQ_DATA}\" \
-Dcom.sun.management.jmxremote \ #THIS is added
-Dcom.sun.management.jmxremote.port=1099 \ #THIS is added
-Dcom.sun.management.jmxremote.rmi.port=1099 \ #THIS is added
-Dcom.sun.management.jmxremote.authenticate=false \ #THIS is added
-Dcom.sun.management.jmxremote.ssl=false \ #THIS is added
$ACTIVEMQ_CYGWIN \
-jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS >/dev/null 2>&1 &
RET=\"\$?\"; APID=\"\$!\";
echo \$APID > $PIDFILE;
echo \"INFO: pidfile created : '$PIDFILE' (pid '\$APID')\";exit \$RET" $DOIT_POSTFIX
RET="$?"
<script code below>
[之后,我只是启动./activemq
脚本,现在我可以像在运行在计算机上的AMQ上那样执行命令行了。