JMXサービスのURLを理解しようとしています。
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
誰かがこれを理解するのを手伝ってくれるなら、それは素晴らしいことです。
ありがとう
この質問に対して以前に作成した回答を再利用します。 Java6のjconsoleを介してTomcatのMBeanServerに接続できません
完全ではありませんが、役立つ場合があります。
RMIレジストリポートで 'TARGET MACHINE'で実行されているJMXサーバー(別名 'JMXエージェント'エイリアス '接続するJVM')があり、 '- JMX RMIサーバーポート at 'JMX RMIサーバーポート'。
注意:
jmxrmi
で取得できます。次のURIは接続の成功につながります(テスト済み)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
これは厄介に見えます。切り分けましょう。
このURIはRFC2609「Service Location Protocol URL」です(まあ、実際にはURIですよね?)
それはで構成されています:
service
-定数jmx:rmi
-サービスタイプ構成:抽象タイプjmx
およびRLスキームrmi
sapは次のように分解されます。
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
-ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-URL部分十分な情報に基づいたJMXクライアントが「ipsite」に接続して、JMX-over-RMI交換を行います。しかし、そのポートを知らないJMXクライアントはどうでしょうか?忍耐...
RL partは次のように分解されます。
/jndi/
-これは、次の場所でルックアップ情報を取得できることをJMXクライアントに伝えているようですrmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-はい、RMIレジストリのルックアップキーjmxrmi
でJMX RMIサーバーに関する情報を取得しますこれは、SLPのlatter部分によって指定されたRMIレジストリに連絡する必要があるため、ややカートの前です。最初にURL。
直感的に頭をかいた後、試してみましょう:
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番目の部分はJMX RMIサーバーのサーバーポートを取得することであることが示唆されています。それは正しくありません。 JMX RMIサーバーのポートは(TCP)1234であり、URLの一部です。 RMIレジストリから取得するのは、RMIスタブ(javax.management.remote.rmi.RMIServerImpl_Stub
)RMIを介してJMXエージェント(MBeanサーバー)と通信するために使用できます。
お役に立てれば。
javax.management.remote.rmi による
このURLはこのように組み立てられます
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname