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

  • 相关阅读:
    NGUI UIEventListener
    Unity3d NGUI Panel 滑动菜单
    NGUI 密码输入框
    Unity3d 时间差
    Unity3d 添加组件脚本和建菜单
    c# [HideInInspector] 属性
    c# [System.Serializable]
    Activity 生命周期
    Unity3d OnApplicationPause与OnApplicationFocus
    C# 中 Struct 与 Class 的区别
  • 原文地址:https://www.cnblogs.com/silyvin/p/10364295.html
Copyright © 2020-2023  润新知