JMX和RMI的区别

20

JMX的目的是什么,它用于什么?我一直在浏览一些关于JMX的教程,它们只是注册一些Mbean并从jconsole调用这些Mbean。如果这就是它的目的,那么JMX和RMI(远程过程调用)之间有什么区别呢?

提前感谢!

3个回答

30

JMX architecture.

JMX中,我们使用ObjectNameobjectReference在MBean服务器中注册我们的对象。然后我们可以远程更改属性或调用方法。

连接器使Java Management Extensions (JMX)技术MBean服务器对远程Java技术客户端可访问。有许多不同的连接器实现方式。特别是,在客户端和服务器之间通信的协议有许多可能性。一些由JMX Remote API规范定义的连接器是:

  • "RMI Connector": 这个标准的远程方法调用(RMI)协议必须由符合JMX Remote API标准的每个实现支持。
  • "Generic Connector": JMX Remote API标准还定义了一种基于TCP套接字的可选协议,称为JMX Messaging Protocol(JMXMP)。标准的实现可以省略JMXMP连接器,但不能省略RMI连接器。Java SE平台不包括可选的JMXMP连接器。
  • "用户定义的协议": 连接器还可以实现JMX技术中未定义的协议。

如果您看一下上面的架构图,连接器使用各种通信框架(RMI、IIOP、JMS、WS-*等)提供对MBeanServer API的完全远程访问,而适配器则将API适配到另一个协议(SNMP、...)或Web-based GUI(HTML/HTTP、WML/HTTP、...)。

通常我们使用JMX连接器连接到MBean服务器,但也可以选择其他连接器。

总之,JMX是一种Java技术,RMI是用于远程方法调用的Java特定实现的接口,可在JMX中用于远程通信。


12

“远程过程调用”是分布式计算概念,其中在一个主机上运行的进程可以调用另一个远程主机上的过程。Java中的RMI就是这个概念的一种实现。

MBeans是可注册到JMX总线的bean类,以便监听总线上到达的事件、将事件发送到总线上、收集来自其他参与MBeans的各种数据等。它通常用于应用程序服务器的健康监控等。它可以检查活动连接数、可用内存量和许多其他统计数据,以供分析引擎进行分析。是的,它们可以使用RPC机制远程调用。这对其作为数据收集器的功能至关重要,因为在应用服务器集群中,必须从所有收集器中获取数据并在一个地方汇总进行分析。


谢谢您的回复。还有一个相关的问题,我们不能使用RMI来实现同样的目的吗? - hnm
2
@hnm:RMI 只涉及远程调用方法,没有其他功能。也就是说,它会给你一个存根类,该类将输入参数序列化,将调用编码为数据,将数据发送到另一端,在那里,服务器端实体(称为骨架)获取数据,解码以了解在服务器端进程上调用哪个类的哪个方法,并进行调用。完成调用后,骨架将输出参数或异常序列化并发送回存根,存根再次对其进行反序列化以将其返回给调用程序。这只是一种远程调用机制。 - rahulmohan
@hnm:(续)MBeans 是与被监视的应用程序交互并提供检索数据方法的特殊类。这些方法可以使用 RMI 理论上调用。但是,JMX 机制提供了更好的执行相同操作的方式。 - rahulmohan
@rahulmohan 我看过 Apache Tomcat 使用 JMX。JMX 是否也提供了守护进程对象? - Jay

8

JMX是一个通用的API,用于发布接口以监视Java应用程序的内部情况(一种Java版本的SNMP)。

RMI是远程方法调用的缩写,是Java特定实现的远程过程调用接口,它们完全没有关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接