Браузер Apache ActiveMQ не может подключиться к консоли JMX

Я использую Apache ActiveMQ version 5.8.0, и я загрузил Apache ActiveMQ Browser version 2.5.2.8

В Apache ActiveMQ я отредактировал конфигурацию activemq.xml для использования JMX:

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true" brokerName="localhost" dataDirectory="${activemq.data}">
  <!-- This needed to be set to true, otherwise JMX won't start in 5.8.0 -->
  <managementContext>
    <managementContext createConnector="true"/>
  </managementContext>
</broker>

В запуске script я устанавливаю настройки JMX следующим образом:

#ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=11099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"

Когда я перезапускаю Apache ActiveMQ, журнал показывает мне, что JMX запущен и доступен:

JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi | org.apache.activemq.broker.jmx.ManagementContext | JMX connector

Также проверьте, прослушивает ли порт результаты в порт прослушивания:

[[email protected] ~]$ netstat -lptun | grep 1099
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 :::1099                     :::*                        LISTEN      16775/java

Apache ActiveMQ работает на сервере. Например, на IP 10.0.0.100. Apache ActiveMQ Browser работает на моем ПК (10.0.0.200).

Когда я пытаюсь подключиться к Apache ActiveMQ Browser, соединения продолжают сбой. Я использую следующие настройки:

 JMX URL: service:jmx:rmi:///jndi/rmi://10.0.0.100:1099/jmxrmi
 JMX role: admin
 JMS password: activemq

В этот момент я оставил пользователя и пароль по умолчанию в jmx.password и jmx.access.

Я также пытался подключиться к шпатлевке для создания туннеля для порта 1099 на локальный порт 1099, а затем подключиться к localhost вместо 10.0.0.100, чтобы убедиться в отсутствии брандмауэра это проблема. Но все не удается.

Я что-то забыл?

Ответ 1

К сожалению, JMX нуждается в двух портах для правильной работы. И второй (порт реестра RMI) по умолчанию выбран случайным образом, вызывая проблемы с брандмауэрами и т.д.

Так как JDK7u4 вы можете использовать

-Dcom.sun.management.jmxremote.rmi.port=<port>

чтобы установить порт RMI.

Ответ 2

После долгих страданий. Магия для подключения за брандмауэром.

<managementContext>
  <managementContext createConnector="true" rmiServerPort="1098"  connectorPort="1099"  />
</managementContext>

Пример строки подключения:

service:jmx:rmi://10.0.4.14:1098/jndi/rmi://10.0.4.14:1099/jmxrmi

Ответ 3

Если вы ограничены версией JDK, поэтому не можете использовать -Dcom.sun.management.jmxremote.rmi.port, вы также можете указать порт реестра RMI в самом ManagementContext.

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true" brokerName="localhost" dataDirectory="${activemq.data}">
    ...
    <managementContext>
        <managementContext connectorPort="1099" rmiServerPort="<port>" />
    </managementContext>
    ...
</broker>

Ответ 4

Для меня я получил это: Connection refused to host: ; nested exception is: ...., хотя он прослушивал TCP через свой порт jmx.

Кажется, мне также нужно было -Djava.rmi.server.hostname = my.local.ip.address, тогда он работал с обычным URL-адресом подключения

 service:jmx:rmi:///jndi/rmi://host:your_jmxremote_port/jmxrmi

не знаю почему...

Возможно, это также необходимо на стороне activemq, не уверен:

--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:11099/jmxrmi