SpringCloud 系列 --2. 服务实例健康自检 SpringBoot Actuator

本贴最后更新于 1719 天前,其中的信息可能已经渤澥桑田

说明:
在默认情况下,Eureka 的客户端每隔 30 秒会发送一次心跳给服务端,告知仍然存活,但是一些情况下(比如数据库挂了),客户端表面上可以正常发送心跳,但实际上无法提供服务。

这时可以利用 Eureka 的健康检查控制器(哪个模块对外提供服务需要自检,在哪个模块实现)。

需要在 pom.xml 中引入

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-actuator</artifactId>
			<version>1.5.3.RELEASE</version>
		</dependency>

SpringBoot Actuator

第一步: 可以实现一个自定义的 HealthIndicator 来根据是否能访问数据库决定自身的健康状态,

第二步: 服务提供者把自身健康状态告知服务器.

实现"健康检查处理器", 将应用的健康状态保存在内存中,状态一旦发生改变,就会重新向服务器进行注册,其他的客户端将拿不到这些不可用的实例。

访问 http://localhost:8080/db/true 将数据库状态设置为 true
image.png

再看状态就是 UP

image.png

第三步 服务查询

查看集群中的服务,可以使用 SpringCloud 的 discoveryClient 类, 或者 eurekaClient 类,SpringCloud 对 Eureka 进行了封装。本例中使用 discoveryClient 的方法来查询服务实例,输出服务实例的状态等信息。


  • 访问 http://localhost:8080/db/false 将 db 设置为 false
    3.再访问 http://localhost:9000/router 服务 输出如下:
    HEALTH-HANDLER-INVOKER---172.16.112.115:health-handler-invoker:9000---UP
    说明,可用的服务只剩下调用者自己了,服务的提供者已经不存在于服务列表中.
  • 综上,

    想要服务健康自检,需要两步(实测,仅需要第二步实现 HealthCheckHandler):
    1.实现 HealthIndicator 来返回服务的状态。

    
    
  • 实现 HealthCheckHandler 来让 Eureka 调用获取 getStatus 方法来获取状态并通知服务端
    • Spring

      Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

      944 引用 • 1459 回帖 • 16 关注
    • Health
      2 引用

    相关帖子

    欢迎来到这里!

    我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

    注册 关于
    请输入回帖内容 ...

    推荐标签 标签

    • 爬虫

      网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

      106 引用 • 275 回帖
    • danl
      132 关注
    • 链书

      链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

      链书社

      链书目前已经下线,也许以后还有计划重制上线。

      14 引用 • 257 回帖
    • WordPress

      WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

      66 引用 • 114 回帖 • 228 关注
    • Spark

      Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

      74 引用 • 46 回帖 • 552 关注
    • RESTful

      一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

      30 引用 • 114 回帖
    • 创业

      你比 99% 的人都优秀么?

      84 引用 • 1399 回帖
    • Python

      Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

      543 引用 • 672 回帖
    • FlowUs

      FlowUs.息流 个人及团队的新一代生产力工具。

      让复杂的信息管理更轻松、自由、充满创意。

      1 引用 • 4 关注
    • ZeroNet

      ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

      1 引用 • 21 回帖 • 638 关注
    • 安装

      你若安好,便是晴天。

      132 引用 • 1184 回帖 • 1 关注
    • 开源

      Open Source, Open Mind, Open Sight, Open Future!

      408 引用 • 3574 回帖 • 1 关注
    • Linux

      Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

      944 引用 • 943 回帖
    • flomo

      flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

      5 引用 • 107 回帖
    • Sym

      Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

      下一代的社区系统,为未来而构建

      524 引用 • 4601 回帖 • 699 关注
    • Vditor

      Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

      352 引用 • 1815 回帖
    • JWT

      JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

      20 引用 • 15 回帖 • 2 关注
    • Q&A

      提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

      8128 引用 • 37048 回帖 • 160 关注
    • Typecho

      Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

      12 引用 • 65 回帖 • 439 关注
    • IDEA

      IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

      180 引用 • 400 回帖
    • Unity

      Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

      25 引用 • 7 回帖 • 171 关注
    • 阿里云

      阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

      89 引用 • 345 回帖
    • DevOps

      DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

      47 引用 • 25 回帖
    • Gitea

      Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

      4 引用 • 16 回帖 • 5 关注
    • Mac

      Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

      166 引用 • 595 回帖 • 1 关注
    • 七牛云

      七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

      27 引用 • 225 回帖 • 168 关注
    • 以太坊

      以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

      34 引用 • 367 回帖 • 1 关注