Metrics源码阅读(01)之HealthChecks

HealthChecks类,在com.yammer.metrics包下,这个包下面,有两个类,一个是HealthChecks,一个是Metrics。

HealthChecks从字面意义上来看,是健康检查,也就是体检。既然Metrics被Kafka应用,难道它是用来给Kafka做“体检”的?

带着问题,我们继续看,先看类定义:

一、类定义:

/**
 * A manager class for health checks.
 */
public class HealthChecks {

这里我把注释也带上,因为我感觉这个注释信息很重要,因为它说明了这个类的作用,一个管理类,而且是为“体检”服务的。

类声明很普通,普通的clas类。

二、成员常量:

private static final HealthCheckRegistry DEFAULT_REGISTRY = new HealthCheckRegistry();

是个静态常量,而且声明时即被初始化。同时也引入了一个HealthCheckRegistry类,这个类,我们暂时先不管,我将在第三篇文章中

讲述。(为什么不是第二篇?第二篇当然是留给Metrics类啊,毕竟都和项目名称一样了,肯定很重要啊)

只有这么一个成员常量,也没有其他成员变量了。看来这个常量相当金贵了。

三、构造函数:

    private HealthChecks() { /* unused */ }

唯一的构造函数被声明成private, 得,看来是不想被实例化了。

四、公开的方法:

总共有三个,全部是静态方法,当然也必须得是静态方法,都不让实例化了,那别人只能走类方法调用了。

(1)register方法,看来是个注册的方法,并且实际是注册到成员常量DEFAULT_REGISTRY中了,我猜HealthCheckRegistry类,八九不离十,内部应该有个集合成员常量/变量。

   public static void register(HealthCheck healthCheck) {
        DEFAULT_REGISTRY.register(healthCheck);
    }

不过,这也让我想起了,观察者模式,难道这是个主题类?

(2)runHealthChecks方法,看来是个执行方法,而且又是委托自己的成员常量DEFAULT_REGISTRY的同名方法去执行。

    public static Map<String, Result> runHealthChecks() {
        return DEFAULT_REGISTRY.runHealthChecks();
    }

不过返回结果是个Map<String, Result>类型的对象,看这个Result,我心里就猜测,这个十之八九是个枚举类,因为我经常这么干,把结果做成枚举,反馈给调用者。没想到,不是,竟然是个内部类,而且它的外部类还和HealthChecks很像,只是少了个结尾s。

(3)defaultRegistry方法,直接返回自己的成员变量。

 public static HealthCheckRegistry defaultRegistry() {
        return DEFAULT_REGISTRY;
    }

【总结】:从这三个方法,和构造函数,以及成员常量,暂时还看不出个所以然来。继续深入研究啊。

猜你喜欢

转载自blog.csdn.net/guohengcook/article/details/81292401