Helidon Logo

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 -