JMXサービスのURLを理解しようとしています。
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
誰かが私がこれを理解するのを手伝ってくれるなら、それは素晴らしいことです。
ありがとう
回答:
この質問に対して以前に書いた回答を再利用します:Java6のjconsole経由でTomcatのMBeanServerに接続できません
完全ではありませんが、役立つ可能性があります。
JMXサーバー(エイリアス「JMXエージェント」エイリアス「接続するJVM」)が「TARGETMACHINE」で実行されており、RMIレジストリポートが「RMIREGISTRYPORT」にあり、JMXRMIサーバーポートが「JMXRMI 」にあるとします。サーバポート'。
注意:
jmxrmi
。次のURIは、接続の成功につながります(テスト済み)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
これは厄介に見えます。バラバラにしましょう。
このURIはRFC2609「サービスロケーションプロトコルURL」です(まあ、それは本当にURIですよね?)
それはで構成されています:
service
-定数 jmx:rmi
-抽象型とURLスキームで構成されるサービス型 jmx
rmi
樹液は次のように分解されます。
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
-ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-URL部分十分な情報に基づいたJMXクライアントが「ipsite」に接続して、JMX-over-RMI交換を実行します。しかし、そのポートを知らないJMXクライアントはどうでしょうか。忍耐...
URL部分は次のように分解されます。
/jndi/
-これは、JMXクライアントに次の場所でルックアップ情報を取得できることを伝えているようですrmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-はい、ルックアップキーの下のRMIレジストリでJMXRMIサーバーに関する情報を取得します jmxrmi
最初にSLPURLの後半部分で指定されたRMIレジストリに接続する必要があるため、これはややカートビフォアホースです。
頭をかいた後、直感的に、試してみましょう:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
はい、うまくいきます!JMX RMIサーバーポートは、レジストリから適切に取得されます。考え直してみると、ターゲットマシンもレジストリから取得する必要があります。
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
さらに良いことに、それも機能します!
参照:
説明する:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
-IPアドレス192.168.30.10のマシンにJMXエージェントがあることを示します。JMXエージェントは(TCP)ポート1234を使用して、RMIを介してJMXサービスを提供します(基本的にはRMIサーバーとして機能します)。/jndi/rmi://192.168.30.10:2344/jmxrmi
-RMIを介してJMXエージェントと対話するためのRMIスタブは、IPアドレス192.168.30.10のマシンで実行され、(TCP)ポート2344を使用しているRMIレジストリにあると言います。RMIスタブを取得するには、次のことを行う必要があります。 「jmxrmi」バインディングを検索します。以前の回答は、URLの2番目の部分がJMXRMIサーバーのサーバーポートを取得することであることを示唆しています。それは正しくありません。JMX RMIサーバーポートは(TCP)1234であり、URLの一部です。RMIレジストリから取得するのは、RMIをjavax.management.remote.rmi.RMIServerImpl_Stub
介してJMXエージェント(MBeanサーバー)と通信するために使用できるRMIスタブ()です。
お役に立てれば。
192.168.30.10:1234
この例では)のないURLがどのように機能するか説明していただけますか?つまり、で始まるURLですservice:jmx:rmi:///jndi/rmi:
。これが一般的に非常に混乱する理由の一部は、JVMの起動時にjmxポートを指定すると、RMIがどこにも参照されないためです-Dcom.sun.management.jmxremote.port=2344
。(私の経験では、jmxremoteポートは「
service:jmx:rmi://192.168.30.10:1234
。または、com.sun.management.—
プロパティを使用することもできます。service:jmx:rmi:///…
JavaにIPとポートを(ランダムにまたはシステムプロパティに基づいて)選択させるなどのURLを使用します。などのURLを使用して、service:jmx:rmi://0.0.0.0:1234
すべてのインターフェイスでポート1234をバインドします。等々。お役に立てれば。
javax.management.remote.rmiによると
このURLはこのように組み立てられます
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname