一 jmx joncole 连接
2种方式:
方式一:
MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName objectName = new ObjectName("jmxBean:name=hello"); server.registerMBean(new Hello(), objectName); // 方式一,启动时指定,代码到此为止 /** * -Djava.rmi.server.hostname=192.168.57.234 * -Dcom.sun.management.jmxremote.port=8288 * -Dcom.sun.management.jmxremote.authenticate=false * -Dcom.sun.management.jmxremote.ssl=false */ // 放大用 Thread.sleep(100000000);
方式二:
MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName objectName = new ObjectName("jmxBean:name=hello"); server.registerMBean(new Hello(), objectName); /** * 方式二 代码注册 * 但启动时仍然需要指定 -Djava.rmi.server.hostname=192.168.57.234,否则客户端jconsole无法连接 */ Registry registry = LocateRegistry.createRegistry(8288); JMXServiceURL jmxServiceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8288/jmxrmi"); JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(jmxServiceURL, null, server); cs.start();
之后jconsole可以
(当然也可以自己写client获取jmx connector,并展示HelloMBean的一些信息,属性,及调用其方法,并通过jmx通知感应属性的变更,结合后可做可视化配置中心):
访问属性值
给属性赋值
调用其中的方法,可输入参数
注意:“属性”取决于接口HelloMBean中的get set函数,而不是其实现类,由jmx自动识别;其它函数识别为“操作”
属性 读 接口HelloMBean get开头的函数
写 接口HelloMBean set开头的函数
操作 接口HelloMBean其它函数
通知 实现类 Hello 去继承 extends NotificationBroadcasterSupport
JMX超详细解读
开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean
二 MXBean
当xxxMBean中有自定义类型时,jconsole提示不可用
此时应当用xxxMXBean
JMX学习笔记(三)-MXBean
三 通知
1. JMX中要定义接口必须以xxxMBean的规范定义
2. 得有类实现xxxMBean接口
3. 在实现类中可以继承NotificationBroadcasterSupport来支持通知机制
4. 可以通过n个jconsole client来验证server的通知,验证通过
JMX学习笔记(三)-MXBean
JMX超详细解读
四 spring
现在,要把任意一个Spring bean转变为MBean,我们所需要做的仅仅是使 用@ManagedResource注解标注bean并使用@ManagedOperation 或@ManagedAttribute注解标注bean的方法。
在类级别使用了@ManagedResource注解来标识这个bean应该被导出为 MBean。objectName属性标识了域(Spitter)和MBean的名称(SpittleController)。 spittlesPerPage属性的存取器方法都使用了@ManagedAttribute注解来进行标注,这 表示该属性应该暴露为MBean的托管属性。注意,其实并不需要使用注解同时标注这两个存取 器方法。如果我们选择仅标注setSpittlesPerPage()方法,那我们仍可以通过JMX设置 该属性,但这样的话我们将不能查看该属性的值。相反,如果仅仅标注 getSpittlesPerPage()方法,那我们可以通过JMX查看该属性的值,但无法修改该属性 的值。
同样需要提醒一下,我们还可以使用@ManagedOperation注解替换@ManagedAttribute 注解来标注存取器方法。这会将方法暴露为MBean的托管操作,但是并不会把spittlesPerPage属性暴露为MBean 的托管属性。这是因为在暴露MBean功能时,使用@ManagedOperation注解标注方法是严 格限制方法的,并不会把它作为JavaBean的存取器方法。因此,使用@ManagedOperation可 以用来把bean的方法暴露为MBean托管操作,而使用@ManagedAttribute可以把bean的属 性暴露为MBean托管属性。
ManagedResource
属性 读 ManagedAttribute注解get方法
写 ManagedAttribute注解set方法
操作 ManagedOperation注解的方法
通知 实现NotificationPublisherAware接口
Spring JMX之一:使用JMX管理Spring Bean
Spring JMX之三:通知的处理及监听
一如既往,spring搞得很复杂