解释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想要连接到')服务器端口'。

注意:

  1. RMIregistry告诉JMX客户端在哪里可以findJMX RMI服务器端口 ; 信息可以在关键的jmxrmi下获得。
  2. RMIregistry端口一般是已知的,因为它是通过JVM启动时的系统属性设置的。
  3. 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 – 由抽象types jmxURLscheme rmi组成的服务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

更好的是,这也是有效的!

参考文献:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

解释:

 service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi 
  1. service:jmx:rmi://192.168.30.10:1234 – 表示在机器上有一个IP地址为192.168.30.10的JMX代理。 JMX代理正在使用(TCP)端口1234通过RMI提供JMX服务(基本上充当RMI服务器)。
  2. /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