spring cloud学习(五)断路器 Hystrix
断路器 Hystrix
断路器模式 (云计算设计模式)
断路器模式源于Martin Fowler的Circuit Breaker一文。
在分布式环境中,其中的应用程序执行访问远程资源和服务的操作,有可能对这些操作的失败是由于瞬时故障,如慢的网络连接,超时,或者被过度使用的资源或暂时不可用。这些故障一般之后的短时间内纠正自己。
所谓的断路器模式,就是当某个微服务发生故障时,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。(总结于网上资料)
什么是 Hystrix?
Spring Cloud Netflix Hystrix是分布式系统处理超时和错误的机制。其服务失效判断阈值为 : 在Hystrix里默认是5秒内20个失败。
正常的分布式系统架构图(来源于Hystri官方文档)如下 :

若其中一个服务挂掉之后可能会导致其他调用业务服务的线程大量堵塞,最终导致整个系统瘫痪。Hystrix 允许开发人员提供错误提示信息并开启一个路由回调。如图(来源于Hystri官方文档) :

通过 Feign 使用 Hystri
Feign中已经依赖了Hystrix,所以我们直接调用即可,不必加入 Hystri 依赖。在上一次的 Fegin 工程中使用 Hystri。
- 创建回调类并实现调用接口类
@Component
public class ServiceClientHystrix implements ServiceClient { @Override
public String printf() {
return "断路器 : 回调函数";
}
}
- 使用
@FeignClient注解中的fallback属性指定回调类
@Component
@FeignClient(value = "my-service", fallback = ServiceClientHystrix.class)
public interface ServiceClient { @RequestMapping("/service")
String printf();
}
- 为了能够看到回调效果,我们设置 Hystri 的超时时间为1毫秒。在
application.properties添加属性:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1
- 依次启动”服务注册中心”、”服务提供者”、”服务消费者(Feign版)”,连续多次访问 http://localhost:2222/test 。
添加 Hystrix Dashboard 监控
- 添加依赖
<!-- Hystrix Dashboard 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
在启动类添加启动注解
@EnableHystrixDashboard再次启动”服务消费者”,访问 http://localhost:2222/hystrix
在URL中输入监控URL : http://localhost:2222/hystrix.stream 同时多次访问 http://localhost:2222/test 并观察监控仪表板的变化。
发现的问题
- 问题描述:Fegin第一次启动请求失败?
- 问题原因:首次请求往往会比较慢(Spring的懒加载机制,需要实例化一些类),因此请求时间往往大于 Hystrix 的默认超时时间(1秒)。
- 解决方法:延长 Hystrix 的超时时间
/**
* default 是默认所有请求;具体某个请求则修改 default 为相应的访问即可
*/
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
spring cloud学习(五)断路器 Hystrix的更多相关文章
- 【Spring Cloud笔记】 断路器-hystrix
在微服务架构中,一个微服务的超时失败可能导致瀑布式连锁反映,Spring Cloud Netflix 的断路器Hystrix通过自主反馈,防止了这种情况发生.下面介绍简单的断路器使用方法. [step ...
- spring cloud学习(三) 断路器
在Spring Cloud中使用了Hystrix 来实现断路器的功能.Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统.服务和第三方库的节点,从而对延迟和 ...
- spring cloud学习(五) 配置中心
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持.配置服务中心采用Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理. 一.配置中心 ...
- Spring Cloud 学习 (五) Zuul
Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用,主要体现在以下 6 个方面: Zuul, Ribbon 以及 Eureka 相结合,可以实现智能路由和负载均衡的功能,Zuul 能够将请求 ...
- SpringCloud全家桶学习之断路器---Hystrix(五)
目前我也在摸索着学习Spring Cloud,本节主要摸索的是服务熔断.服务降级.Hystrix服务监控. 一.Hystrix概述 (1)服务雪崩 服务雪崩:多个微服务之间调用的时候,假设微服务A调用 ...
- Spring Cloud(五):Hystrix 监控面板【Finchley 版】
Spring Cloud(五):Hystrix 监控面板[Finchley 版] 发表于 2018-04-16 | 更新于 2018-05-10 | 在上一篇 Hystrix 的介绍中,我们提到 ...
- Spring Cloud项目之断路器集群监控Hystrix Dashboard
微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完 ...
- spring cloud 2.x版本 Hystrix Dashboard断路器教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- Spring Cloud Gateway的断路器(CircuitBreaker)功能
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 如何在 Linux 中挂载 ISO 文件
在 Windows 中,我们常常使用 Daemon Tools 和 Virtual CloneDrive 等虚拟光驱软件挂载光盘镜像,下面我们一起来学习在 Linux 中如何挂载 ISO 文件. 在 ...
- zabbix-server新增zabbix-agent
zabbix监控系统搭建好了之后,就需要为各种角色host加入进来,现在新增一台zabbix-agent: 1.在172.16.23.128上安装zabbix-agent,zabbix-server: ...
- QT中VideoProbe的简介和实现
一.遇到问题 在Android机上使用QT进行图像处理程序设计的时候,遇到的一个比较明显的问题就是图片采集的问题----摄像头获得是实时的视频,如果我们想从中动态地截获图片,并且转换成M ...
- Splay简介
Splay树,又叫伸展树,可以实现快速分裂合并一个序列,几乎可以完成平衡树的所有操作.其中最重要的操作是将指定节点伸展到指定位置, 目录 节点定义 旋转操作 伸展操作 插入操作 删除操作 lower_ ...
- git2
1,开源的代码管理工具 2,分布式管理工具(更安全,可以脱网操作) 3,git的分支管理更加便捷. 4,代码的传输更新速度更快 利用git可以进入多人配合代码开发.有备份.协同 sudo apt-ge ...
- Metasploit应用举例
本篇文章包含以下几方面内容: 1.Metasploit端口扫描: 2.用其他模块 3.metasploit smb获取系统信息 4.Metsploit服务识别 5.ftp识别: 6.metasploi ...
- PHP开发者的路书
初学者 作为初学者,通常情况下,我们都会买一本PHP教材,或者在网上看免费教程,这当然是学习的好途径.因为,这些书籍和网上的免费教程,基本上都是由浅入深的渐进式教学方式,基础知识居多,高级知识占少量的 ...
- Big Number-Asia 2002, Dhaka (Bengal) (计算位数)题解
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【源码编译】spark源码编译
本文采用cdh版本spark-1.6.0-cdh5.12.0 1.源码包下载 2.进入根目录编译,编译的方式有2种 maven mvn clean package \ -DskipTests -Pha ...
- WebApi——json返回多了 k_BackingField
产生原因: model类添加了 [System.Serializable] 解决方案: xxxxx.WebApi\App_Start\WebApiConfig.cs的Register函数中添加如 ...