Helidon 是 Oracle 提供的轻量级的微服务框架,提供了 Router、Microprofile、Security 等必要的组件。相对 Spring Boot 等老牌框架而言,它的优势在于轻量同时源代码简单适合阅读。
由于是新出的框架,所以它的文档还不够完善,有时间需要阅读其代码才能明白具体的使用方式。例如,Helidon 的健康检查这块的文档就写得非常的简单,如果想要扩展按照文档中的例子代码将会写得很混乱。
HealthSupport health = HealthSuport.builder()
.add(() -> HealthCheckResponse.named("exampleHealthCheck")
.up()
.withData("time", System.currentTimeMillis())
.build())
.build();
实际上,Helidon 的 HealthChecks.healthChecks() 已经提供了三个默认的健康检查的反馈,分别是死锁、磁盘以及内存的状态:
/**
* Built-in health checks.
*
* @return built-in health checks to be configured with {@link io.helidon.health.HealthSupport}
* @see io.helidon.health.HealthSupport.Builder#add(org.eclipse.microprofile.health.HealthCheck...)
*/
public static HealthCheck[] healthChecks() {
return new HealthCheck[] {
deadlockCheck(),
diskSpaceCheck(),
heapMemoryCheck()
};
}
分别看其代码就可以发现,这三个直接调用的方法其实就是 HealthCheck 接口的实现。因此,我们自己也可以按照 Helidon 的方式来实现自定义健康检查的项目,满足本地的具体业务的情况。
例如,下面实现了个显示本地服务器时间以及虚拟机的 UPTIME 的状态:
@Health
@ApplicationScoped
public class LocalTimeCheck implements HealthCheck {
@Override
public HealthCheckResponse call() {
return HealthCheckResponse.named("localtime")
.withData("upTime", ManagementFactory.getRuntimeMXBean().getUptime())
.withData("currentTime", System.currentTimeMillis())
.build();
}
}
然后,在注册到对应的 HealthSupport 中即可:
HealthSupport health = HealthSupport.builder()
.add(new LocalTimeCheck())
.build();
顺便说一句,需要注意下:HealthSupport.add()
里面的回调都是同步执行的。
HealthSupport 默认绑定的路由为 /health
,如果需要更改这块则根据源代码的提示,增加 .webContext() 这个方法即可,或者直接将其配置到配置文件中:
HealthSupport health = HealthSupport.builder()
.webContext("/your-health-check-path")
// ...
- eof -