美文网首页
Jmx 学习

Jmx 学习

作者: jwfy | 来源:发表于2017-12-31 20:42 被阅读124次

    jmx全称是Java Management Extensions 是java的一种扩展管理工具,可以通过网页或者客户端的方式管理正在运行的java服务,例如Tomcat的容器停止或者重启。Tomcat基于jmx开发的,Jboss也是类似的,数据库连接池druid也有同样的功能。拥有jmx意味着可以通过在页面上动态调整服务。如下图jmx架构图

    image.png

    由上面的图片可以看出mbean分为三层,分别是基础层、代理层,远程管理层

    • 基础层mbean,分为了标准Mbean、动态Mbean、mxbean等
    • 代理层(适配层)提供对mbean的管理
    • 远程管理层 可以通过http、snmp、rmi等不同的协议去管理具体的mbean资源

    StandardMBean

    使用StandardMBean 必须为每一个MBean定义一个接口,而且名字限定为xxxMBean

    // 接口
    public interface DemoMBean {
    
        public String getName();
        public int getAge();
        public void setName(String name);
        public void setAge(int age);
        void init();
    }
    
    // 具体实现
    public class Demo implements DemoMBean {
    
        private String name;
        private int age;
    
        @Override
        public String getName() {
            return name;
        }
    
        @Override
        public int getAge() {
            return age;
        }
    
        @Override
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public void init() {
            this.age = 10;
            this.name = "hehehehehe";
        }
    }
    
    // agent
    public class DemoAgent {
    
        public static void main(String[] args)  {
            try {
                MBeanServer server = ManagementFactory.getPlatformMBeanServer();
                String domainName = "DemoMBean";
                // 为MBean(下面的new Hello())创建ObjectName实例
                ObjectName demo = new ObjectName(domainName + ":name=Demo");
    
                // 将demo对象注册到MBeanServer上去
                server.registerMBean(new Demo(), demo);
    
                Thread.sleep(60*60*1000);
                // demo而已,便于测试,加上了这个线程睡眠
    
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    
    
    image.png

    // 系统默认的赋值


    image.png

    // 触发init方法


    image.png

    // 触发init函数,运行完值已经发生变化了


    image.png

    这样我们就可以在本地通过jconsole动态修改了服务内的数据,在实际发开中,存在修改线上配置文件的属性,除了重新部署修改之外,也可以通过类似的方案实现。

    除了本地jconsole工具管理mbean,还可以通过rmi、http等方式管理,原理也类似,遵循jmx的使用协议,在原本写好的agent上再包装一层提供给外界使用。

    参考链接

    相关文章

      网友评论

          本文标题:Jmx 学习

          本文链接:https://www.haomeiwen.com/subject/vkwagxtx.html