JMX
规范将整个管理结构主要分为三个部分:
Instrumentation level
,该层用来提供JMX可监控资源。Agent level
,该层用来直接管理上一层的资源,而且允许资源可以被远程控制。Distributed services level
,该层定义了如何控制Agent Level
层的接口和组件。
其架构示意图如下所示:
FROM 《JMX1.4 Specification》
Instrumentation Level
在最下一层,提供了可监控资源的载体 MBean
,在其上一层的 Agent Level
通过 MBeanServer
对外提供对 MBean
管理的功能,而最上层的 Distributed Services Level
提供了多种形式的连接方式:
- 采用JMX的管理应用:双方通过
Connector
连接 - 采用某种协议的应用(比如浏览器):使用
Protocol Adaptor
连接 - 第三方不兼容JMX的管理应用:通过
JMX Manager
连接
这幅图的右边还有管理协议接口,这一块的具体作用还不太清楚,但是JMX整体架构已经挺明了了
Instrumentation Level
JMX manageable resource can be an application, an implementation of a service, a device, a user, and so forth.
只要遵守JMX规范,资源可以是一个应用程序,可以是一个服务,也可以是一个设备等等。
因为它们都跑在JVM上,只要资源载体遵守JMX规范就能将资源数据暴露出去,那么无论是啥都可以被管理起来。
In addition, the instrumentation level also specifies a notification mechanism. This allows MBeans to generate and propagate notification events to components of the other levels.
Instrumentation Level
允许 MBean
(资源载体)可以创建和传播消息通知给其他层的组件。
最典型的,比如 JConsole
的数据(比如堆内存)会实时发生变化。当程序的持续运行,堆内存数据发生变化后就会创建一个消息通知给上层组件。
总而言之,这一层主要就这两个功能:
- MBean资源载体:载体的种类很多,不同的种类影响的只是开发方式,不会影响管理方式。
Standard MBeans
👈常用Dynamic MBeans
Open MBeans
Model MBeans
- 消息通知:当数据发生改变,发送消息给Listener。
Agent Level
这一层包含三块内容:xingxing
- 🌟
MBean Server
,用来注册MBean
的中心服务,只有本地程序能对MBean
执行注册/删除 Agent Services
,用来调用MBean
对外提供的操作Protocol Adaptors and Connectors
,连接器
🌟MBean Server
这部分是 Agent Level
的核心组件,所有的要暴露到外部的 MBean
都要注册到 MBServer
里。
Agent Services
这一块苦恼了我挺久的,因为始终没明白它到底想说啥。后来在 jboss
的网站上看到了它对 Agent Services
的理解:
The JMX agent services are objects that support standard operations on the MBeans registered in the MBean server. The inclusion of supporting management services helps you build more powerful management solutions. Agent services are often themselves MBeans, which allow the agent and their functionality to be controlled through the MBean server. The JMX specification defines the following agent services
大部分内容和官方的差不多,但是点出来了大多数的 Agent Service
就是 MBean
本身,可以理解为一些带有操作的 MBean
本身就算做 Agent Service
,正如架构图里所示,有些 MBean
是作为 Agent Service
,有些 MBean
仅作为资源。
官方已经提供了一些 Agent Service
:
javax.management.loading.MLetMBean
:动态加载字节码,如果是不存在的字节码就从网络里下载javax.management.monitor.MonitorMBean
:监控几个属性的变化,如果发生变化就会触发通知javax.management.timer.TimerMBean
:会间隔时间发送通知javax.management.relation.RelationServiceMBean
,维护角色用的??未知
一般兼容JMX服务的管理应用都会提供上述的 Agent Service
。
Protocol Adaptors and Connectors
这两个归到 Agent Level
是因为这两货都是对外提供连接的, Protocol Adaptors
直接返回管理视图(协议数据,比如HTML)给远程客户端; Connectors
包含了 Client Connector
和 Server Connector
, Client
可以通过 Client Connector
连接 Server Connector
来操控 Agent Service
。
因为官方没有提供 Protocol Adptor
的实现,只包含了 Connector
,所以官方文档看起来只写了 Connector
。
Distributed Services Level
这一层主要定义了管理应用如何来连接到 Connector/Protocol Adptor
进行管理。