ActiveMQ命令行例外:“无法检索RMIServer存根”

问题描述 投票:0回答:1

我在服务器上运行的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

如何获得与远程服务器上运行的命令相同的命令?

java activemq
1个回答
0
投票

因此,在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上那样执行命令行了。

© www.soinside.com 2019 - 2024. All rights reserved.