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