system health_可重复使用的MicroProfile Health探针

system health

MicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态。 在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下,这非常有用。

在应用程序中使用MicroProfile Health API就像实现一个(或多个) org.eclipse.microprofile.health.HealthCheck并使用@Health注释类一样@Health

HealthCheck接口具有您应该实现的一种方法,即HealthCheckResponse call()

因此,您可以确定在调用此方法时,实例是否正常。

您的回复( HealthCheckResponse )包含:

  • 从其他探针识别此探针的名称
  • UPDOWN标志,以指示状态。
  • 您想要在键值对中包含的任何其他元数据。

一个基本的例子。

假设我们有一个使用数据库的应用程序,并且如果与数据库的连接断开(或非常慢),则应报告此应用程序不正常:

@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

system health

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 visudo -- 编辑/etc/sudoers文件

文章目录命令介绍常用选项参考示例编辑文件 /etc/sudoers检查 /etc/sudoers 文件的语法错误、所有者和模式命令介绍 使用 visudo 命令可以打开 /etc/sudoers 文件进行编辑。当然 vim 也可以编辑该文件&#xff0c;但是不建议这样做&#xff0c;因为使用命令 visudo 编辑文件 /…

Spring Cloud Feign 请求压缩 、Feign的日志级别配置

一、Spring Cloud Feign 请求压缩 #开启压缩compression:request:enabled: true # 开启请求压缩#最小触发压缩的大小min-request-size: 2048#触发压缩数据类型&#xff0c;&#xff08;注意不能使用"" ,&#xff09;mime-types: text/xml, application/xml, applicat…

Linux 命令之 sudoedit -- 以另外一个用户身份编辑文件

文章目录命令介绍常用选项参考示例以用户 root 身份来编辑指定的文件以其它用户身份编辑指定的文件命令介绍 查看使用帮助&#xff0c;感觉和命令 sudo 完全一样。 [mysqlhtlwk0001host ~]$ sudoedit -h sudoedit - 以其他用户身份编辑文件usage: sudoedit [-AknS] [-r role]…

文档在线签名_为什么需要为文档和合同切换到在线签名

文档在线签名嘿&#xff0c;怪胎&#xff0c; 今天&#xff0c;我们为您带来一些不同。 无论您是开发人员&#xff0c;经理还是设计师&#xff0c;这都会提高您的生产力和效率。 对于公司和个人而言&#xff0c;良好地管理文书工作是强大基础的最重要部分之一。 将工作流程从…

网关 Spring Cloud Gateway

一、 Gateway 简介 Spring Cloud Gateway 是Spring Cloud团队的一个全新项目&#xff0c;基于Spring 5.0、SpringBoot2.0、Project Reactor 等技术开发的网关。 旨在为微服务架构提供一种简单有效统一的API路由管理方式。 Spring Cloud Gateway 作为SpringCloud生态系统中的网…

Linux命令之su -- 用于切换当前用户身份到其他用户身份

文章目录命令介绍特别重要常用选项su 命令存在的安全隐患参考示例切换成指定的用户身份&#xff0c;但是环境变量不变切换成指定的用户身份&#xff0c;并且改成对应用户的环境变量切换成指定的用户&#xff0c;并告知新的 shell 不要去读取启动文件切换成指定的用户执行命令&a…

apache ignite_Apache Ignite变得简单:第一个Java应用程序

apache ignite在本文中&#xff0c;我们将更进一步&#xff0c;让您完成第一个Ignite应用程序的创建&#xff0c;以从分布式缓存中进行读写操作。 作为第一个示例&#xff0c;我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存…

Linux 命令之 sudo -- 以其他用户身份来执行命令

文章目录命令介绍原理相关文件通配符和命令 su 的比较常用选项几个重要选项的解读-k 选项-s 选项-i 选项su、sudo su、sudo -i 的区别查看日志文件参考示例以用户 mysql 的身份执行命令 pwd以用户 root 的身份执行命令 pwd以 root 的权限执行上一条命令以 root 的权限编辑指定的…

openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS

openjdk和jdkJDK 11 计划于 2018年9月25日星期二发布&#xff0c;以实现全面可用性 。OpenJDK jdk-dev邮件列表上的Mark Reinhold消息于2018 年8月16日宣布“ JDK 11现在处于发布候选阶段 。” 但是&#xff0c;Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详…

Linux系统通过文件/etc/sudoers设置用户使用sudo的权限/用户使用sudo的授权配置

文章目录sudo 权限配置说明如何修改 sudo 会话有效期设置输入密码时显示星&#xff08;*&#xff09;号别名规则如何定义别名及使用别名配置权限为什么配置的命令要使用绝对路径参考示例授权用户 test 可以重启服务器授权群组可以使用 sudo 切换成任何用户身份&#xff0c;执行…

system.gc 性能_使用这些先进的GC技术提高应用程序性能

system.gc 性能应用程序性能是我们关注的重点&#xff0c;垃圾收集优化是取得小而有意义的进步的好地方 自动化垃圾收集&#xff08;与JIT HotSpot编译器一起&#xff09;是JVM中最先进&#xff0c;最有价值的组件之一&#xff0c;但是许多开发人员和工程师对垃圾收集&#…

Linux 命令之 who -- 打印当前登录用户/显示目前登入系统的用户信息。

文章目录命令介绍常用选项参考示例打印用户登录信息打印全面的信息打印系统登录进程显示登录系统的所有用户名称和总人数命令介绍 who 命令用来打印当前登录用户信息&#xff0c;包含了系统的启动时间 、 活动进程 、 使用者 ID、使用终端等信息&#xff0c;是系统管理员了解系…

SpringCloud全局过滤器自定义

一、实现步骤&#xff1a; 在gateway_service工程编写全局过滤器类GlobalFilter,Ordered编写业务逻辑代码访问接口测试&#xff0c;加token和不加token。 二、业务逻辑代码 package com.william.filters;import org.springframework.cloud.gateway.filter.GatewayFilterChain…

Linux 命令之 whoami -- 打印当前有效的用户名称

文章目录命令介绍参考示例命令介绍 whoami 命令用于打印当前有效的用户名称&#xff0c;相当于执行 id -un 命令。 参考示例 [roothtlwk0001host ~]# whoami root

java流写入数据库_使用Java流查询数据库

java流写入数据库在本文中&#xff0c;您将学习如何编写纯Java应用程序&#xff0c;这些应用程序能够使用现有数据库中的数据&#xff0c;而无需编写一行SQL&#xff08;或类似的语言&#xff0c;如HQL&#xff09;&#xff0c;而无需花费数小时将所有内容放在一起。 准备好应用…

Linux 命令之 id -- 显示用户ID和组ID

文章目录命令介绍常用选项参考示例显示当前用户的用户id及所属用户组的信息显示用户所属群组的ID显示用户所属附加群组的ID显示指定用户信息命令介绍 id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID&#xff08;GID&#xff09;则对应…

SpringCloud局部过滤器自定义

一、实现步骤&#xff1a; 在gateway_service中编写MyParamGatewayFilterFactory类实现业务代码&#xff1a;循环请求参数中是否包含name&#xff0c;如果包含则输出参数值修改配置文件访问请求测试&#xff0c;带name参数 二、在gateway_service中编写MyParamGatewayFilterF…

enum.values_占用内存的Enum.values()方法

enum.values我是Java 枚举的忠实拥护者 。 似乎我们一直在等待获得它&#xff0c;但是当我们最终获得它&#xff08; J2SE 5 &#xff09;时&#xff0c;该枚举比C和C 提供的枚举要好得多&#xff0c;对我来说似乎“ 值得等待” 。 与Java enum一样好&#xff0c;它也不是没有问…

搭建配置中心微服务

一、实现步骤&#xff1a; 创建配置中心SpringBoot项目config_server配置坐标依赖启动类添加开启配置中心服务注解配置服务中心application.yml文件启动测试 二、创建配置中心SpringBoot项目config_server 配置坐标依赖 需要依赖父工程 <?xml version"1.0" en…

Linux命令之 users -- 显示当前登录的用户

文章目录命令介绍参考示例查看当前登录的所有用户命令介绍 users 命令用于显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示相同的次数。 参考示例 查看当前登录的所有用户 [rooth…