jmx mbean 与java监控

 

一 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搞得很复杂

 

posted on 2019-02-12 10:55  silyvin  阅读(568)  评论(0编辑  收藏  举报