该方法比较简单,调用AppInfoParser类中的getVersion方法和getCommitId方法。
打印两个方法的返回值,随后退出。
public class AppInfoParser {
private static final Logger log = LoggerFactory.getLogger(AppInfoParser.class);
private static final String VERSION;
private static final String COMMIT_ID;
static {
Properties props = new Properties();
try (InputStream resourceStream = AppInfoParser.class.getResourceAsStream("/kafka/kafka-version.properties")) {
props.load(resourceStream);
} catch (Exception e) {
log.warn("Error while loading kafka-version.properties :" + e.getMessage());
}
VERSION = props.getProperty("version", "unknown").trim();
COMMIT_ID = props.getProperty("commitId", "unknown").trim();
}
public static String getVersion() {
return VERSION;
}
public static String getCommitId() {
return COMMIT_ID;
}
这两个方法在该类中也仅仅是返回VERSION属性和COMMIT_ID属性的值。而这两个属性的值是通过加载/kafka/kafka-version.properties文件,通过version关键字和commitId关键字获取的。
该类中有两个方法值得注意一下:
public static synchronized void registerAppInfo(String prefix, String id, Metrics metrics) {
try {
ObjectName name = new ObjectName(prefix + ":type=app-info,id=" + Sanitizer.jmxSanitize(id));
AppInfo mBean = new AppInfo();
ManagementFactory.getPlatformMBeanServer().registerMBean(mBean, name);
registerMetrics(metrics); // prefix will be added later by JmxReporter
} catch (JMException e) {
log.warn("Error registering AppInfo mbean", e);
}
}
public static synchronized void unregisterAppInfo(String prefix, String id, Metrics metrics) {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
try {
ObjectName name = new ObjectName(prefix + ":type=app-info,id=" + Sanitizer.jmxSanitize(id));
if (server.isRegistered(name))
server.unregisterMBean(name);
unregisterMetrics(metrics);
} catch (JMException e) {
log.warn("Error unregistering AppInfo mbean", e);
}
}
该方法是将JMXServer上注册AppInfo的MBean和取消注册的方法做了一个封装。AppInfo类也只有getVersion和getCommitId两种方法,目的是将版本信息和commitId对外暴露。
public interface AppInfoMBean {
public String getVersion();
public String getCommitId();
}
public static class AppInfo implements AppInfoMBean {
public AppInfo() {
log.info("Kafka version : " + AppInfoParser.getVersion());
log.info("Kafka commitId : " + AppInfoParser.getCommitId());
}
@Override
public String getVersion() {
return AppInfoParser.getVersion();
}
@Override
public String getCommitId() {
return AppInfoParser.getCommitId();
}
}
注:MBean(Managed Bean)是java提供的一种监控对象的方式,注册时根据不同的MBean有不同的注册方法,AppInfo类使用的是StandardMBean方式。