可重复使用的MicroProfile Health探针
MicroProfile Health API是一个非常基本的API,它基于一个或多个Health Probe报告您的服务状态。 这在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下非常有用。
在应用程序中使用MicroProfile Health API就像实现一个(或多个) org.eclipse.microprofile.health.HealthCheck
并使用@Health
注释类一样@Health
。
HealthCheck
接口具有您应该实现的一种方法,即HealthCheckResponse call()
。
因此,您可以确定在调用此方法时,实例是否正常。
您的回复( HealthCheckResponse
)包含:
- 从其他探针识别此探针的名称 。
- UP或DOWN标志,以指示状态。
- 键值对中要包含的任何其他元数据。
一个基本的例子。
假设我们有一个使用数据库的应用程序,并且如果与数据库的连接断开(或非常慢),则应报告此应用程序不正常:
@Health@ApplicationScopedpublic class MembershipHealthCheck implements HealthCheck {@Inject private DataSource datasource;@Overridepublic HealthCheckResponse call() {HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("membership");try {Connection connection = datasource.getConnection();boolean isValid = connection.isValid(timeout);DatabaseMetaData metaData = connection.getMetaData();responseBuilder = responseBuilder.withData("databaseProductName", metaData.getDatabaseProductName()).withData("databaseProductVersion", metaData.getDatabaseProductVersion()).withData("driverName", metaData.getDriverName()).withData("driverVersion", metaData.getDriverVersion()).withData("isValid", isValid);return responseBuilder.state(isValid).build();} catch(SQLException e) {log.log(Level.SEVERE, null, e);responseBuilder = responseBuilder.withData("exceptionMessage", e.getMessage());return responseBuilder.down().build();}}}
(见完整的例子在这里 )
在上面的示例中,运行状况探测器名称为“ membership”,如果可以在一定时间内建立与数据库的连接,则报告UP 。 它还包括数据库的一些元数据字段。
/健康。
如果浏览到服务器上的/health
,您将看到来自所有探测的汇总响应以及服务器的总状态(“启动”或“关闭”)。
{"outcome":"UP","checks":[{"name":"membership","state":"UP","data":{"databaseProductVersion":"5.5.5-10.1.35-MariaDB","databaseProductName":"MySQL","driverVersion":"mysql-connector-java-8.0.11 (Revision: 6d4eaa273bc181b4cf1c8ad0821a2227f116fedf)","isValid":"true","driverName":"MySQL Connector/J"}}]}
如果数据库出现故障:
{"outcome":"DOWN","checks":[{"name":"membership","state":"DOWN","data":{"exceptionMessage":"No operations allowed after connection closed."}}]}
使用MicroProfile配置创建可重复使用的探针。
您的任何应用程序都可以重复使用某些运行状况探针,并且可以使用Microprofile Config API外部化设置。 例如,如果我们希望运行状况探针检查系统负载,则可以外部化系统负载应该在哪个阶段开始报告下来。
@Health@ApplicationScopedpublic class SystemLoadHealthCheck implements HealthCheck {@Inject @ConfigProperty(name = "health.systemload.max", defaultValue = "0.7")private double max;@Overridepublic HealthCheckResponse call() {OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();String arch = operatingSystemMXBean.getArch();String name = operatingSystemMXBean.getName();String version = operatingSystemMXBean.getVersion();int availableProcessors = operatingSystemMXBean.getAvailableProcessors();double systemLoadAverage = operatingSystemMXBean.getSystemLoadAverage();double systemLoadAveragePerProcessors = systemLoadAverage / availableProcessors;HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("system-load").withData("name", name).withData("arch", arch).withData("version", version).withData("processors", availableProcessors).withData("loadAverage", String.valueOf(systemLoadAverage)).withData("loadAverage per processor", String.valueOf(systemLoadAveragePerProcessors)).withData("loadAverage max", String.valueOf(max));if(systemLoadAverage>0){boolean status = systemLoadAveragePerProcessors < max;return responseBuilder.state(status).build();}else{// Load average not availablereturn responseBuilder.up().build();}}}
(见完整的例子在这里 )
在上面,我们现在可以通过更改health.systemload.max
配置值将默认的0.7
系统负载覆盖为我们自己的值。
其他示例可能包括:
- 堆内存
- 非堆内存
- 线程数
在项目中使用它
您可以在项目中使用以上所有内容,因为它们可以在maven Central和github中使用 :
在您的pom.xml
:
<dependency><groupId>com.github.phillip-kruger.microprofile-extensions</groupId><artifactId>health-ext</artifactId><version>1.0.9</version></dependency>
/health
的汇总结果可以如下所示:
{"outcome":"UP","checks":[{"name":"system-load","state":"UP","data":{"name":"Linux","arch":"amd64","processors":"8","loadAverage":"2.03","version":"4.18.1-arch1-1-ARCH","loadAverage max":"0.7","loadAverage per processor":"0.25375"}},{"name":"membership","state":"UP","data":{"databaseProductVersion":"5.5.5-10.1.35-MariaDB","databaseProductName":"MySQL","driverVersion":"mysql-connector-java-8.0.11 (Revision: 6d4eaa273bc181b4cf1c8ad0821a2227f116fedf)","isValid":"true","driverName":"MySQL Connector/J"}},{"name":"non-heap-memory","state":"UP","data":{"max %":"0.9","max":"-1","used":"132792064"}},{"name":"threads","state":"UP","data":{"max thread count":"-1","daemon thread count":"86","monitor deadlocked thread count":"0","thread count":"134","deadlocked thread count":"0","started thread count":"138","peak thread count":"136"}},{"name":"heap-memory","state":"UP","data":{"max %":"0.9","max":"14995161088","used":"207556800"}}]}
翻译自: https://www.javacodegeeks.com/2018/08/reusable-microprofile-health-probes.html
可重复使用的MicroProfile Health探针相关推荐
- system health_可重复使用的MicroProfile Health探针
system health MicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态. 在某些服务器或群集控制器需要决定是否以及何 ...
- OpenShift - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift
<OpenShift 4.x HOL教程汇总> 文章目录 创建CodeReady项目 Live Coding 打包Java应用 编译成可执行应用 配置服务健康检查 向OpenShift部署 ...
- 使用wildfly部署项目
WildFly部署项目 一.下载 在浏览器地址栏输入https://www.wildfly.org/,打开WildFly官网,点击other versions选择版本,因为开发环境是jdk1.8,部署 ...
- 5分钟搞懂如何使用探针检查Kubernetes健康
Kubernetes是一种开源容器编排平台,大大简化了应用程序的创建和管理. Kubernetes之类的分布式系统可能很难管理,原因是涉及许多活动组件,所有这些组件必须正常工作,整个系统才能顺畅运行. ...
- MicroProfile 1.2新增功能介绍
Eclipse Foundation最近发布了MicroProfile 1.2版,该版本提供了下列新增API: \\ Health Check 1.0\\ Health Metrics 1.0\\ F ...
- Apache发布TomEE 7.1,支持Java 8和MicroProfile 1.2
Apache TomEE社区发布了TomEE 7.1,这是一个重大的升级,提供了Java SE 8和MicroProfile 1.2支持. 历史 2011年,David Blevins当时受雇于IBM ...
- ASP.NET Core on K8S深入学习(6)Health Check
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.预计阅读时间为10分钟. 01 - 关于K8S中的健康监测 所谓Health C ...
- 微软 azure_在Microsoft Azure上运行Eclipse MicroProfile
微软 azure 在本文中,我将通过展示如何在Microsoft Azure Web Apps for Containers中执行操作来跟踪有关在Oracle Cloud中运行Eclipse Micr ...
- 在Microsoft Azure上运行Eclipse MicroProfile
在本文中,我将通过展示如何在Microsoft Azure Web Apps for Containers中执行操作来跟踪有关在Oracle Cloud中运行Eclipse MicroProfile应 ...
最新文章
- 大家都来说说为什么要学习jQuery Mboile?
- 在MFC中使用AFXBEGINTHREAD的方法
- SpringBoot+Mybatis 框架之 @Select注解方式搭建
- HOW TO WRITE A DAILY LAB NOTE?
- 阿里云交通数据中台解决方案,打造“数字化生产力”
- 新基建带来新机遇!大数据产业发展需“四驱”推动
- java 内部类 单例_确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)...
- [原创]ASP.net 2.0 ObjectDataSource 应用操作代码实例(1)-—访问SQL2005
- 计算机科学 —— 时间戳(timestamp)
- iOS中Navigation中添加自定义Button等UIView
- IBM的量子云计算准备开始商用 我国此前已实现量子加密产品商用
- 动力节点Docker视频教程从入门到精通
- 在ESC云服务器中部署KodCloud云盘系统(四)
- (Android) 如何使用HOOK实现动态注入以及自动化操作
- SecureCRT界面的菜单栏不见了怎么办?
- 硬盘的Smart信息说明
- 什么是Word Embeddings
- Mac 强制退出应用程序的办法
- conda安装 tensorflow-gpu出现错误
- win11系统截图的几种方法
热门文章
- [XSY3382] 专家系统(二分+线段树)
- Codefroces1077F2. Pictures with Kittens (hard version)
- Http 持久连接与 HttpClient 连接池
- Spring Boot 面试题
- Mysql常用语法总结
- 又一大波笑到肾抽筋,笑出六块腹肌的段子
- Struts2下创建自定义类型转换器(表单中日期的处理)
- 配置struts.xml时extends=struts-default会报错,原因和解决
- 微信消息提醒与消息数字提示之BadgeView
- android 设置视频音量大小,为cocos2d-x添加调节视频音量的功能(Android)