Health Check
Cuando aumenta la cantidad de servicios, se vuelve más complejo detectar y manejar si otras instancias de servicios se ejecutan correctamente o no. Una solución es que cada servicio proporcione un control de su estado y el estado de sus componentes.
Para crear comprobaciones de estado con MicroProfile, solo necesitamos crear una clase que implemente desde HealthCheck y anule el método HealthCheckResponse call(). Además, la clase requiere al menos una de las anotaciones: @Liveness o @Readiness. Codificaremos la lógica que comprueba que el componente de nuestro servicio funciona correctamente en el método de llamada.
import javax.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
import org.eclipse.microprofile.health.Liveness;
import org.eclipse.microprofile.health.Readiness;
@ApplicationScoped
@Liveness
@Readiness
public class DatabaseHealthCheck implements HealthCheck {
@Override
public HealthCheckResponse call() {
HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("database");
try {
return responseBuilder.up()
.withData("name", "my_dummy_db")
.build();
}catch(Exception ex){//SqlException
return responseBuilder.down().build();
}
}
}Todos nuestros “health checks” están disponibles en la URL: http://localhost:8080/health
{
"status":"UP",
"checks":[
{
"name":"database",
"status":"UP",
"data":{
"Name":"my_dummy_db"
}]
}Recomiendo agregar las siguientes dependencias que brindan algunas verificaciones de estado genéricas para que pueda conocer el uso de memoria y sub-procesos de nuestra aplicación, y publicar una interfaz de usuario de tablero simple con un resumen de nuestras verificaciones de estado. Esa interfaz de usuario está disponible en: http://localhost:8080//health-ui/:
<dependency>
<groupId>org.microprofile-ext.health-ext</groupId>
<artifactId>healthprobe-jvm</artifactId>
<version>1.0.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.microprofile-ext.health-ext</groupId>
<artifactId>health-ui</artifactId>
<version>1.0.5</version>
<scope>runtime</scope>
</dependency>http://localhost:8080/stock-service/health-ui/

