初探RMI设计模式实现大家——JMX(Java Management Extension)

简介: 初探RMI设计模式实现大家——JMX(Java Management Extension)

项目地址上传至GitHub,地址是 https://github.com/zbkpointer/JMXProject.git,欢迎下载运行。


1 JMX 组成三要素及应用Case


  1. 代理服务器
  2. MBean对象
  3. 客户端


三者的关系如下图所示。

image.png


JMX应用场景有:Zookeeper、Kafka的某些指标监控,都是通过JMX实现。


2 JMX MBean对象种类


  1. Standard MBeans
  2. Dynamic MBeans
  3. Open MBeans
  4. Model MBeans
  5. MXBeans


3 JMX 核心要义


客户端通过访问代理服务器达到掌控MBean对象的目的,MBean对象可以是设备、资源或者整个程序。


4 JMX 官方例子


1.项目预览

1666192977224.jpg

2.Standard MBeans 构建


首先是编写Standard MBeans接口

public interface HelloMBean {
    public void sayHello();
    public int add(int x, int y);
    public String getName();
    public int getCacheSize();
    public void setCacheSize(int size);
}

接着是编写Standard MBeans接口的实现类


public class Hello implements HelloMBean{
    private final String name = "Reginald";
    private int cacheSize = DEFAULT_CACHE_SIZE;
    private static final int DEFAULT_CACHE_SIZE = 200;
    public void sayHello() {
        System.out.println("hello, world");
    }
    public int add(int x, int y) {
        return x + y;
    }
    public String getName() {
        return this.name;
    }
    public int getCacheSize() {
        return this.cacheSize;
    }
    public synchronized void setCacheSize(int size) {
        this.cacheSize = size;
        System.out.println("Cache size now " + this.cacheSize);
    }
}

最后是创建管理代理服务器


 public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        ObjectName name = new ObjectName("com.zbk:type=Hello");
        Hello mbean = new Hello();
        mbs.registerMBean(mbean, name);
        System.out.println("Waiting forever...");
        Thread.sleep(Long.MAX_VALUE);
    }

笔者认为代理服务器使用反射原理获取MBean的属性和动作,进而通过服务接口调用MBean的信息,使得客户端能够从外部对MBean进行操作。


5 使用Jconsole修改程序内部参数


Jconsole的位置在"\jdk8\bin\jconsole.exe",双击打开即可。连接该项目主线程。

1666193091758.jpg

切换Tab到MBean栏,打开所属项目,就可看到属性和操作。

1666193103673.jpg

点击操作中的sayHello()方法,会出现下图所示的动作。

1666193121408.jpg


附件


名词解释:

RMI: Remote Method Invocation


相关文章
|
5天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
17 0
[Java]23种设计模式
|
21天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
15天前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
14 0
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
21天前
|
设计模式 Java
Java设计模式
Java设计模式
24 0
|
24天前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
26 0
|
24天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
37 0
|
24天前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
36 0