Jmx 学习

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

Jmx 学习_第1张图片
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();
        }
    }
}

Jmx 学习_第2张图片
image.png

// 系统默认的赋值


Jmx 学习_第3张图片
image.png

// 触发init方法


Jmx 学习_第4张图片
image.png

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


Jmx 学习_第5张图片
image.png

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

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

参考链接

  • JMX超详细解读
  • 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

你可能感兴趣的:(Jmx 学习)