我正在尝试了解JMX服务URL。
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
如果有人可以帮助我理解这一点,那就太好了。
谢谢
Answers:
我将重用我先前为该问题写的答案:无法通过Java6中的jconsole连接到Tomcat的MBeanServer
它不完整,但可能会有所帮助:
假设您具有在“ TARGET MACHINE”上运行的JMX服务器(别名为“ JMX Agent”别名“您要连接的JVM”),其RMI注册表端口位于“ RMI REGISTRY PORT”,而JMX RMI服务器端口位于“ JMX RMI”服务器端口'。
注意:
jmxrmi
。以下URI将导致成功连接(已测试)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
看起来很讨厌 让我们分开。
该URI是RFC2609“服务位置协议URL”(嗯,它确实是URI,对吗?)
它由以下组成:
service
-一个常数 jmx:rmi
-服务类型包括:抽象类型 jmx
和URL方案 rmi
汁液分解为:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
-ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-URL部分消息灵通的JMX客户端连接到“ ipsite”以进行RMX上的JMX交换。但是不知道该端口的JMX客户端呢?忍耐...
URL部分分解为:
/jndi/
-这似乎告诉JMX客户端可以在随后的位置获取查询信息rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-是的,我们在查找键下的RMI注册表中获取有关JMX RMI服务器的信息 jmxrmi
这有点像马车一样,因为必须先联系SLP URL后半部分给出的RMI注册表。
直观地抓挠头部后,让我们尝试:
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(基本上充当RMI服务器)提供JMX服务。/jndi/rmi://192.168.30.10:2344/jmxrmi
-表示可以在RMI注册表中找到通过RMI与JMX代理进行交互的RMI存根,该注册表在IP地址为192.168.30.10的计算机上运行,并且正在使用(TCP)端口2344。要获取RMI存根,您需要查找“ jmxrmi”绑定。先前的答案表明,URL的第二部分是获取JMX RMI服务器的服务器端口。那是不对的。JMX RMI服务器端口是(TCP)1234,并且是URL的一部分。从RMI注册表中得到的是RMI存根(javax.management.remote.rmi.RMIServerImpl_Stub
),可用于通过RMI与JMX代理(MBean服务器)进行对话。
希望这可以帮助。
192.168.30.10:1234
在此示例中)?即以开头的网址service:jmx:rmi:///jndi/rmi:
。通常如此令人困惑的部分原因是,当我们在启动JVM时指定jmx端口时,它在任何地方都没有引用RMI :-Dcom.sun.management.jmxremote.port=2344
。(请注意,根据我的经验,jmxremote端口与URL的“ RMI Registry”部分相关联,而不与“ JMX RMI Server”部分相关。)
service:jmx:rmi://192.168.30.10:1234
。或者,您可以使用com.sun.management.—
属性。使用URL,例如service:jmx:rmi:///…
让Java为您选择IP和端口(随机或基于系统属性)。使用URL,例如service:jmx:rmi://0.0.0.0:1234
在所有接口上绑定端口1234。等等。希望这可以帮助。