15

私は使用しApache ActiveMQ version 5.8.0、ダウンロードしましたApache ActiveMQ Browser version 2.5.2.8

Apache ActiveMQ 内で、activemq.xmlJMX を使用するように構成を編集しました。

<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>

起動スクリプト内で、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

また、ポートがリッスンしているかどうかを確認すると、結果がリッスン ポートになります。

[me@server ~]$ 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 は私の PC (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.passwordjmx.accessのデフォルトとして残しました。

また、パテで接続してポート1099からローカルポート1099へのトンネルを作成し、10.0.0.100ではなくlocalhostに接続して、ファイアウォールが問題にならないことを確認しました。しかし、すべて失敗します。

私は何かを忘れていますか?

4

4 に答える 4

17

残念ながら、JMX が正しく動作するには 2 つのポートが必要です。2 つ目 (RMI レジストリ ポート) はデフォルトでランダムに選択され、ファイアウォールなどで問題が発生します。

JDK7u4以降、使用できます

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

使用する RMI ポートを設定します。

于 2013-10-04T07:18:20.930 に答える
11

何時間も苦しんだ後。ファイアウォールの背後で接続する魔法。

<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
于 2015-03-12T14:04:41.730 に答える
6

JDK のバージョンによって制限されているため、-Dcom.sun.management.jmxremote.rmi.port を使用できない場合は、代わりに managementContext 自体で RMI レジストリ ポートを指定できます。

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true" brokerName="localhost" dataDirectory="${activemq.data}">
    ...
    <managementContext>
        <managementContext connectorPort="1099" rmiServerPort="<port>" />
    </managementContext>
    ...
</broker>
于 2014-01-15T10:41:15.333 に答える