三、Spring Cloud 之旅 -- Eureka 服务实例的健康自检
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 服务实例的健康自检相关推荐
- 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解
本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...
- 新 Spring Cloud (一) 之 Eureka 服务注册中心
文章目录 一.前言 0. 之前写过两篇Spring Cloud,但是感觉不够具体,所以重新写了一份. 1. SpringCloud 2. 什么是Eureka 3. 原理图 二.基本使用实例 1. 场景 ...
- Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务
上一篇文章,讲了SpringCloudConfig 集成Git仓库,这一篇我们讲一下SpringCloudConfig 配和 Eureka 注册中心一起使用 在分布式系统中,由于服务数量巨多,为了方便 ...
- Spring Cloud Zuul API 网关服务
API 网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的 Facade 模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤.它除了要实 ...
- 破甲两千六 Spring Cloud 教程(三):添加Spring Cloud 的 Netflix Eureka 插件,实现服务端、客户端的发现与注册
写在前面: Spring Cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等. 5大常用组件: 服务发现 ...
- Spring Cloud第一篇:服务注册与发现Eureka
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
- 青柠开车Spring Cloud(三) —— Spring cloud Eureka
项目源码github地址 什么是Eureka 快速入门 创建spring boot项目 引入spring cloud配置 引入Eureka依赖jar包 application.properties的配 ...
- Spring Cloud | 第一篇:服务注册与发现(Eureka)
写在前面:本文参考spring cloud官方文档 http://projects.spring.io/spring-cloud/spring-cloud.html#_service_discover ...
- Spring Cloud第二篇:服务消费者RestTemplate+Ribbon
在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...
- 基于Spring cloud Ribbon和Eureka实现客户端负载均衡
前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...
最新文章
- Windows 技术篇-桌面图标全部消失问题解决方法,windows资源管理器重启实例演示
- Hi3516A开发-- 板卡串口烧写
- DeepMind将博弈论融入多智能体研究,让纳什均衡变得更简单
- redis深度历险:核心原理与应用实践_玩转Redis,阿里技术带你从核心原理到应用实践,一份文档全掌握...
- mysql 使用的三个小技巧
- ajax常见写法,jquery ajax较常见的写法
- AcWing 840. 模拟散列表(散列hash)
- Appium appium 安装不了
- 阿里云服务器mysql莫名丢失_MySQL5.6 突然死掉 阿里云端的 服务器上搭建的
- PHP中self和static的区别,php面向对象程序设计中self与static的区别分析
- MySQL忘记密码应当如何重置
- 硬盘pe安装红旗linux系统,WinPE 安装操作系统详细图解(图文教程)
- 微信公共号如何本地调试
- 计算机网络——域名系统
- C++从键盘输入的方法
- Transformer时序预测
- Android Studio kotlin编程实现图片滑动浏览 stepbystep
- 海天MA3200Ⅱ/1700卧式_节能注塑机
- Android旗舰机与苹果,真正的旗舰之王!iPhone和国产安卓旗舰机,谁才能够当之无愧?...
- 用微信远程控制电脑?这个新玩法一定爽到你