NOTE:本博客演示的代码可以去github下载:https://github.com/aharddreamer/chendong.git

上节我们演示了简单的将微服务发布Eureka与相互之间的调用,还演示了Eureka的集群及负载均衡功能。这节我们要学习Eureka更高级一点的功能—微服务实例的健康自检。

在默认情况下,Eureka客户端(微服务提供者或调用者)会每隔30秒发送一次心跳给Eureka服务器,告诉服务器自己是否是存活状态,但是实际情况可能会这样:客户端出现了部分异常,服务已经不可用了,但是还在正常的向服务器发送心跳,因为很显然,即使某个接口不能用了整个微服务还并没有挂掉。比如数据库连接中断 或者依赖的上游系统挂了等等。

那么,我们就需要一个健康自检机制,更加智能的处理这种问题。刚好 Eureka提供了这么一种功能—健康检查控制器。

本节演示的项目结构 (没有建过项目的同学请看我上一节博客):

eureka-server

first-service-provider

first-service-invoker

修改first-service-provider 项目的POM,我们要加入下面依赖:

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

加好之后,启动first-service-provider试试。我在启动的时候报了一个jackson包未找到的错误,于是我又加入下面的依赖:

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.9.8</version>
</dependency>

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.9.8</version>
</dependency>

PS: POM加完依赖之后,如果你用的IDE是Intellij IDEA,那么修改POM后右下角会出现一个弹出框,请点击Import Changes,这样依赖就会自动下载了。

如果是eclipse,修改完POM之后,请选中POM 右键->update maven project.

依次启动eureka-server和first-service-provider.

启动完之后,在浏览器输入: http://localhost:8080/health

可以看到浏览器返回如下:

说明该REST服务向外展示当前应用的状态为UP (服务正常)。

接下来我们要试试actuator自带的健康自检功能。

在first-service-provider里面新建一个Controller,我们要在这里面写一个测试的接口:

定义了一个变量,访问的时候通过控制这个变量来表示数据库的连接状态。

True表示当前数据库连接良好

False表示当前数据库连接中断

新建一个类,这个类实现了HealthIndicator接口,讲实现它的一个health方法,这个方法是用来构建当前微服务状态的。我们要做的就是当数据库连接中断(dbConnectionIsOk=false)的时候,来调整当前微服务的状态为DOWN。

好了,重新启动first-service-provider试试,然后访问http://localhost:8080/health 接口看看。会发现开始当前微服务状态为DOWN:

然后通过测试接口,修改状态为true:

再访问health接口试试:

可以看到服务已经起来了。

光这样的话只有服务提供者自己知道当前健康状态,我们还需要将之告诉服务器,然后在Eureka服务器上注册的其他微服务将拿不到这些“生病”的微服务。

新建一个健康检查处理器,处理器会将健康状态保存在内存,一旦状态发生改变将报告给服务器,如果状态不正常,其他微服务也就拿不到它了。

NOTE: 注意都不要忘了加@Component注解哦,要加入到Spring的容器托管,不然不会起作用的。

改好之后,再启动first-service-provider,启动的过程中可以看到控制台打印的“数据库连接异常”信息,这是因为dbConnectionIsOk变量的初始值是false。启动完了之后访问Eureka Server看看:

可以看到目前first-service-provider是DOWN的,被红色标记出来了。

我们通过测试接口改下状态:

咦!为啥还是DOWN的?

嚯嚯,是因为传状态给服务器的动作是定时执行的,并不是实时执行,默认是30秒钟一次,所以等待30秒钟再看看:

可以发现,它已经UP了。

那么我们怎么修改这个默认时间呢?可以再application.properties里面加入这个属性:

eureka.client.instance-info-replication-interval-seconds=10

这样就能将时间限制为10秒了。如果是application.yml文件,那就是这样的:

eureka.client.instanceInfoReplicationIntervalSeconds: 10

自己动手试试吧!

接下来,演示一下微服务查询。

这次我们要修改的是first-service-invoker(调用者) 的代码来看看健康自检的效果。

在first-service-invoker里面加一个测试接口,代码如下:

启动first-service-invoker, 在浏览器输入:http://localhost:9000/testHealth 就可以看到各个服务的状态了

我来美化一下:

三、Spring Cloud 之旅 -- Eureka 服务实例的健康自检相关推荐

  1. 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  2. 新 Spring Cloud (一) 之 Eureka 服务注册中心

    文章目录 一.前言 0. 之前写过两篇Spring Cloud,但是感觉不够具体,所以重新写了一份. 1. SpringCloud 2. 什么是Eureka 3. 原理图 二.基本使用实例 1. 场景 ...

  3. Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务

    上一篇文章,讲了SpringCloudConfig 集成Git仓库,这一篇我们讲一下SpringCloudConfig 配和 Eureka 注册中心一起使用 在分布式系统中,由于服务数量巨多,为了方便 ...

  4. Spring Cloud Zuul API 网关服务

    API 网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的 Facade 模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤.它除了要实 ...

  5. 破甲两千六 Spring Cloud 教程(三):添加Spring Cloud 的 Netflix Eureka 插件,实现服务端、客户端的发现与注册

    写在前面: Spring Cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等. 5大常用组件: 服务发现 ...

  6. Spring Cloud第一篇:服务注册与发现Eureka

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  7. 青柠开车Spring Cloud(三) —— Spring cloud Eureka

    项目源码github地址 什么是Eureka 快速入门 创建spring boot项目 引入spring cloud配置 引入Eureka依赖jar包 application.properties的配 ...

  8. Spring Cloud | 第一篇:服务注册与发现(Eureka)

    写在前面:本文参考spring cloud官方文档 http://projects.spring.io/spring-cloud/spring-cloud.html#_service_discover ...

  9. Spring Cloud第二篇:服务消费者RestTemplate+Ribbon

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  10. 基于Spring cloud Ribbon和Eureka实现客户端负载均衡

    前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...

最新文章

  1. Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
  2. Hi3516A开发-- 板卡串口烧写
  3. DeepMind将博弈论融入多智能体研究,让纳什均衡变得更简单
  4. redis深度历险:核心原理与应用实践_玩转Redis,阿里技术带你从核心原理到应用实践,一份文档全掌握...
  5. mysql 使用的三个小技巧
  6. ajax常见写法,jquery ajax较常见的写法
  7. AcWing 840. 模拟散列表(散列hash)
  8. Appium appium 安装不了
  9. 阿里云服务器mysql莫名丢失_MySQL5.6 突然死掉 阿里云端的 服务器上搭建的
  10. PHP中self和static的区别,php面向对象程序设计中self与static的区别分析
  11. MySQL忘记密码应当如何重置
  12. 硬盘pe安装红旗linux系统,WinPE 安装操作系统详细图解(图文教程)
  13. 微信公共号如何本地调试
  14. 计算机网络——域名系统
  15. C++从键盘输入的方法
  16. Transformer时序预测
  17. Android Studio kotlin编程实现图片滑动浏览 stepbystep
  18. 海天MA3200Ⅱ/1700卧式_节能注塑机
  19. Android旗舰机与苹果,真正的旗舰之王!iPhone和国产安卓旗舰机,谁才能够当之无愧?...
  20. 用微信远程控制电脑?这个新玩法一定爽到你

热门文章

  1. 计算机办公软件应用实训,办公软件office实训计划
  2. c语言程序撩女朋友,撩女朋友的套路情话 绝对让她对你死心塌地
  3. codevs 4939 欧拉函数
  4. Enterprise Architect安装
  5. 快应用中实现自定义抽屉组件
  6. 2寸照片尺寸大小是多少,两寸照片多大?
  7. Python之os库
  8. u盘linux反应好慢,识别U盘很缓慢怎么办的八种解决方法
  9. 随机数生成器python_python安全开发军规之四:使用安全的随机数生成器
  10. 计算机学情分析案例,小学信息技术课学情分析