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/