java - mbean - Explicar la URL de JMX
jmx tomcat (3)
Estoy tratando de entender una URL de servicio JMX.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Sería genial, si alguien me puede ayudar a entender esto.
Gracias
Para explicar:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
-
service:jmx:rmi://192.168.30.10:1234
- dice que hay un Agente JMX en la máquina con la dirección IP 192.168.30.10. El agente JMX está utilizando el puerto (TCP) 1234 para proporcionar servicio (s) JMX a través de RMI (básicamente actúa como un servidor RMI). -
/jndi/rmi://192.168.30.10:2344/jmxrmi
- dice que el stub de RMI para interactuar con el Agente JMX sobre RMI se puede encontrar en el registro de RMI que se ejecuta en la máquina con la dirección IP 192.168.30.10 y está utilizando (TCP) puerto 2344. Para obtener el código auxiliar de RMI, debe buscar el enlace "jmxrmi".
Las respuestas anteriores sugieren que la segunda parte de la URL es obtener el puerto del servidor del servidor JMX RMI. Eso no es correcto. El puerto del servidor JMX RMI es (TCP) 1234 y forma parte de la URL. Lo que obtiene del registro de RMI es el código auxiliar de RMI ( javax.management.remote.rmi.RMIServerImpl_Stub
) que puede usar para hablar con el Agente JMX (MBean Server) a través de RMI.
Espero que esto ayude.
Reutilizaré una respuesta que escribí anteriormente para esta pregunta: No se puede conectar con el servidor MBean de Tomcat a través de jconsole en Java6
No está completo, pero podría ayudar:
Supongamos que tiene el servidor JMX (alias ''JMX Agent'' al JVM al que desea conectarse) ejecutándose en ''TARGET MACHINE'' con el puerto de registro RMI en ''RMI REGISTRY PORT'' y el puerto del servidor JMX RMI en ''JMX RMI PUERTO DE SERVICIO''.
Nota:
- El registro de RMI indica a los clientes de JMX dónde encontrar el puerto del servidor de JMX RMI ; La información se puede obtener bajo la clave
jmxrmi
. - El puerto de registro de RMI se conoce generalmente porque se configura a través de las propiedades del sistema en el inicio de JVM.
- El puerto del servidor JMX RMI generalmente no se conoce, ya que JVM lo elige al azar (si no se toman otras precauciones).
El siguiente URI conducirá a una conexión exitosa (probado)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Esto se ve desagradable. Vamos a cortarlo.
Este URI es un RFC2609 "URL de protocolo de ubicación de servicio" (bueno, en realidad es un URI, ¿verdad?)
Está compuesto por:
-
service
- una constante -
jmx:rmi
- el tipo de servicio compuesto por: tipo abstractojmx
y esquema de URLrmi
- el resto - la savia (especificación del protocolo de acceso al servicio)
la savia se descompone en:
-
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite -
/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- parte de URL
Un cliente JMX bien informado se conecta al "ipsite" para realizar intercambios de JMX sobre RMI; pero ¿qué pasa con el cliente JMX que NO SABE ese puerto? Paciencia...
La parte de la URL se descompone en:
-
/jndi/
- Esto parece decirle al cliente JMX que puede obtener información de búsqueda en la ubicación que sigue -
rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Sí, obtenemos información sobre el servidor JMX RMI en el registro RMI, bajo la clave de búsquedajmxrmi
Esto es algo así como "carro antes que caballo", ya que uno tiene que contactar primero con el registro de RMI dado por la última parte de la URL de SLP.
Después de rascarse la cabeza, de forma intuitiva, intentemos:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Sí, eso funciona! El puerto del servidor JMX RMI se obtiene del registro. Pensándolo bien, la máquina de destino también debe obtenerse del registro, por lo tanto:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Aún mejor, ¡eso también funciona!
Referencias:
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
- http://mx4j.sourceforge.net/docs/ch03s04.html
- http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
- http://www.rfc-editor.org/rfc/rfc2609.txt
Según javax.management.remote.rmi
esta url esta ensamblada asi
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname