Ich versuche, eine JMX-Dienst-URL zu verstehen.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Es wäre toll, wenn mir jemand helfen könnte, das zu verstehen.
Vielen Dank
Antworten:
Ich werde eine Antwort, die ich zuvor für diese Frage geschrieben habe, wiederverwenden: Es kann keine Verbindung zu Tomcats MBeanServer über jconsole in Java6 hergestellt werden
Es ist nicht vollständig, könnte aber helfen:
Angenommen, Sie haben den JMX-Server (Alias 'JMX Agent' Alias 'die JVM, zu der Sie eine Verbindung herstellen möchten') auf 'TARGET MACHINE' mit dem RMI-Registrierungsport unter 'RMI REGISTRY PORT' und dem JMX RMI- Serverport unter ' JMX RMI ' ausgeführt SERVER PORT'.
Hinweis:
jmxrmi
.Der folgende URI führt zu einer erfolgreichen Verbindung (getestet)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Das sieht böse aus. Lass es uns auseinander schneiden.
Diese URI ist eine RFC2609 "Service Location Protocol URL" (nun, es ist wirklich eine URI, oder?)
Es besteht aus:
service
- eine Konstante jmx:rmi
- Der Diensttyp, bestehend aus: abstraktem Typ jmx
und URL-Schema rmi
Saft wird zerlegt in:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- URL-TeilEin gut informierter JMX-Client stellt eine Verbindung zur "ipsite" her, um JMX-over-RMI-Austausche durchzuführen. Aber was ist mit dem JMX-Client, der diesen Port nicht kennt? Die Geduld...
Der URL-Teil wird zerlegt in:
/jndi/
- Dies scheint dem JMX-Client mitzuteilen, dass er am folgenden Speicherort Suchinformationen abrufen kannrmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Ja, wir erhalten Informationen über den JMX-RMI-Server in der RMI-Registrierung unter dem Suchschlüssel jmxrmi
Dies ist etwas Cart-before-Horse, da man sich zuerst an die RMI-Registrierung wenden muss, die im letzten Teil der SLP-URL angegeben ist.
Nachdem wir uns intuitiv am Kopf gekratzt haben, versuchen wir Folgendes:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Ja das funktioniert Der JMX RMI-Server-Port wird gut von der Registrierung bezogen. Bei zweiten Überlegungen sollte der Zielcomputer auch aus der Registrierung bezogen werden, also:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Noch besser, das funktioniert auch!
Verweise:
Erklären:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
- sagt, dass sich auf dem Computer ein JMX-Agent mit der IP-Adresse 192.168.30.10 befindet. Der JMX-Agent verwendet (TCP) -Port 1234, um JMX-Dienste über RMI bereitzustellen (fungiert im Wesentlichen als RMI-Server)./jndi/rmi://192.168.30.10:2344/jmxrmi
- sagt, dass sich der RMI-Stub für die Interaktion mit dem JMX-Agenten über RMI in der RMI-Registrierung befindet, die auf dem Computer mit der IP-Adresse 192.168.30.10 ausgeführt wird und den (TCP-) Port 2344 verwendet. Um den RMI-Stub abzurufen, müssen Sie Suchen Sie nach der Bindung "jmxrmi".Frühere Antworten deuten darauf hin, dass der zweite Teil der URL darin besteht, den Server-Port des JMX RMI-Servers abzurufen. Das ist nicht richtig. Der JMX-RMI-Serverport ist (TCP) 1234 und Teil der URL. Was Sie von der RMI-Registrierung erhalten, ist der RMI-Stub ( javax.management.remote.rmi.RMIServerImpl_Stub
), mit dem Sie über RMI mit dem JMX-Agenten (MBean Server) kommunizieren können.
Hoffe das hilft.
192.168.30.10:1234
in diesem Beispiel) funktionieren, da Sie angeben, dass die Antwort von @ david-tonhofer nicht korrekt ist ? dh die URLs, die mit beginnen service:jmx:rmi:///jndi/rmi:
. Ein Grund dafür, dass dies im Allgemeinen so verwirrend ist, ist, dass wenn wir beim Starten der JVM einen jmx-Port angeben, dieser nirgendwo auf RMI verweist : -Dcom.sun.management.jmxremote.port=2344
. (Beachten Sie, dass meiner Erfahrung nach der jmxremote-Port dem Teil "RMI Registry" der URL zugeordnet ist, nicht dem Teil "JMX RMI Server".)
service:jmx:rmi://192.168.30.10:1234
. Alternativ können Sie com.sun.management.—
Eigenschaften verwenden. Verwenden Sie eine URL service:jmx:rmi:///…
, damit Java die IP und den Port für Sie auswählt (zufällig oder basierend auf Systemeigenschaften). Verwenden Sie eine URL service:jmx:rmi://0.0.0.0:1234
, um Port 1234 an alle Schnittstellen zu binden. Und so weiter. Hoffe das hilft.
Laut javax.management.remote.rmi
Diese URL wird so zusammengestellt
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname