解释JMX URL
我想了解一个JMX服务的URL。
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
如果有人能帮助我理解这一点,那将是非常棒的。
谢谢
我将重复使用前面提到的问题: 无法通过Java6中的jconsole连接到Tomcat的MBeanServer
这并不完整,但可能有所帮助:
假设您在'TARGET MACHINE'上运行的RMIregistry端口位于'RMI REGISTRY PORT', JMX RMI服务器端口位于'JMX RMI'的JMX服务器(别名'JMX Agent'别名'JVM想要连接到')服务器端口'。
注意:
- RMIregistry告诉JMX客户端在哪里可以findJMX RMI服务器端口 ; 信息可以在关键的
jmxrmi
下获得。 - RMIregistry端口一般是已知的,因为它是通过JVM启动时的系统属性设置的。
- JMX RMI服务器端口一般并不知道,因为JVM随机select它(如果不采取其他预防措施)。
下面的URI将导致连接成功(testing)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
这看起来很讨厌 让我们把它分开。
这个URI是一个RFC2609的“服务定位协议URL”(呃,它确实是一个URI,对吧?)
它由以下部分组成:
-
service
– 一个常数 -
jmx:rmi
– 由抽象typesjmx
和URLschemermi
组成的服务types - 剩下的 – sap (服务访问协议规范)
树汁被分解成:
-
//<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
– 是的,我们在RMIregistry中得到关于JMX RMI服务器的信息,在查找键jmxrmi
这有些马马虎虎,因为必须先联系SLP URL 后半部分给出的RMIregistry 。
抓头后,直观地,让我们试试:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
是的,这是有效的! JMX RMI服务器端口很好地从registry中获得。 再想一想, 目标机器也应该从registry中获得,因此:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
更好的是,这也是有效的!
参考文献:
- 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
解释:
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存根可以通过RMI与JMX Agent进行交互,可以在IP地址为192.168.30.10的机器上运行的RMIregistry中find,并且正在使用(TCP)端口2344.要获得RMI存根,您需要查找“jmxrmi”绑定。
以前的答案表明URL的第二部分是获取JMX RMI服务器的服务器端口。 这是不正确的。 JMX RMI服务器端口是(TCP)1234,并且是URL的一部分。 从RMIregistry获得的是RMI存根( javax.management.remote.rmi.RMIServerImpl_Stub
),您可以使用它来通过RMI与JMX代理(MBean Server)通信。
希望这可以帮助。
根据javax.management.remote.rmi
这个url是这样组装的
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname