Исключение командной строки ActiveMQ: «Не удалось получить заглушку RMIServer» - PullRequest
0 голосов
/ 10 апреля 2020

У меня ActiveMQ 5.10.0 на сервере, и я пытаюсь использовать командные строки для извлечения информации, которую я вижу в веб-консоли AMQ (https://activemq.apache.org/web-console ).

Ни одна из командных строк не работает. ie. в папке 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:

Как ни странно, когда я загружаю и запускаю та же версия AMQ на моем локальном компьютере p c, командные строки 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

Как заставить работать те же команды, что и на удаленном сервере?

1 Ответ

0 голосов
/ 10 апреля 2020

Итак, глядя на похожие проблемы на StackOverflow и других сайтах, мне кажется, что мне нужно добавить аргументы JVM в ActiveMQ, когда он запущен.

Папка bin AMQ содержит скрипт activemq, в той же папке bin, где скрипт запускает файл activemq.jar.

Мне нужно было обновить часть файла скрипта, чтобы включить эти аргументы JVM (в ваш скрипт не включайте # comments в конце строки):

<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, работающем на моей машине.

...